1. 程式人生 > 其它 >HBase 安裝之後版本的驗證的bug:(錯誤的替換、找不到或無法載入主類、SLF4J)

HBase 安裝之後版本的驗證的bug:(錯誤的替換、找不到或無法載入主類、SLF4J)

HBase 安裝之後版本的驗證的bug:(錯誤的替換、找不到或無法載入主類SLF4J

問題描述:
驗證Hbase是否安裝成功時爆出一大堆資訊:

/usr/local/hadoop/libexec/hadoop-functions.sh: 行 2360: HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_USER:錯誤的替換
/usr/local/hadoop/libexec/hadoop-functions.sh: 行 2455: HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_OPTS:錯誤的替換
錯誤: 找不到或無法載入主類 org.apache.hadoop.hbase.util.GetJavaProperty
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:
/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] HBase 2.2.2 Source code repository git://6ad68c41b902/opt/hbase-rm/output/hbase revision=e6513a76c91cceda95dad7af246ac81d46fa2589 Compiled by hbase-rm on Sat Oct 19 10:10:12 UTC 2019 From source with checksum 4d23f97701e395c5d34db1882ac5021b

解決方式一:修改 hbase-env.sh 檔案(hbase-env.sh 在 hbase 安裝目錄下的 /usr/local/hbase/conf 目錄下)

hbase-env.sh 檔案 最後一句:前面的註釋去掉。(先到該目錄,然後右鍵該目錄,用vim開啟)

解決方式二:如果問題還沒有得到解決:例如還有一些問題:

(1)“找不到或無法載入主類”的問題:org.apach.hadoop.habase.util.GetJavaProperty

/usr/local/hadoop/bin../libexec/hadoop-functions.sh行HADOOP._ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_USER:錯誤的替換。

解決:修改hbase安裝目錄下 /bin/目錄下的hbase檔案:(先到該目錄,然後右鍵該目錄,用vim開啟)

① 在add_to_cp_if_exists “${HBASE_HOME}/hbase-server/target” 下新增:

# Needed for GetJavaProperty check below
add_to_cp_if_exists "${HBASE_HOME}/hbase-server/target/classes"

② 將以下程式碼註釋掉:

    #add the hbase jars for each module
    for f in $HBASE_HOME/hbase-jars/hbase*.jar; do
        if [[ $f = *sources.jar ]]
      then
        : # Skip sources.jar
      elif [ -f $f ]
      then
        CLASSPATH=${CLASSPATH}:$f;
      fi
    done

③ 在if [ -n "${HADOOP_IN_PATH}" ] && [ -f "${HADOOP_IN_PATH}" ]; then 下新增:

  # If built hbase, temporarily add hbase-server*.jar to classpath for GetJavaProperty
  # Exclude hbase-server*-tests.jar
  temporary_cp=
  for f in "${HBASE_HOME}"/lib/hbase-server*.jar; do
    if [[ ! "${f}" =~ ^.*\-tests\.jar$ ]]; then
      temporary_cp=":$f"
    fi
  done

④ 修改:HADOOP_JAVA_LIBRARY_PATH=$(HADOOP_CLASSPATH="$CLASSPATH" "${HADOOP_IN_PATH}" \

為:

  HADOOP_JAVA_LIBRARY_PATH=$(HADOOP_CLASSPATH="$CLASSPATH${temporary_cp}" "${HADOOP_IN_PATH}" \

然後儲存並退出。

(2)SLF4J 的問題:Class path contains multiple SLF4J bindings.

原因:路徑中含有衝突的jar包,如下圖所示,一個在hbase路徑下另一個在hadoop路徑下。

解決:將HBase 或 Hadoop 目錄下的 slf4j-logj12-1.7.25.jar, 其中一個改一下,

例如修改 HBase目錄下的 slf4j-logj12-1.7.25.jar 為:slf4j-logj12-1.7.25.jar-copy (右鍵搜尋到的檔案 -》 重新命名)

(3)現在還有問題:HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_USER: 錯誤的替換

解決:直接忽視

參考文章:

《Hbase 出現:/usr/local/hadoop/libexec/hadoop-functions.sh: 行 2360: HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.》

https://blog.csdn.net/weixin_45048331/article/details/109823555

《啟動HBase時提示SLF4J: Class path contains multiple SLF4J bindings的解決方法》

https://blog.csdn.net/qq_45135120/article/details/107048944

《centos7下hbase配置及解決錯誤: 找不到或無法載入主類 org.apache.hadoop.hbase.util.GetJavaProperty等三個問題》

https://blog.csdn.net/pycrossover/article/details/102627807