HBase 安装之后版本的验证的bug:(错误的替换找不到或无法加载主类SLF4J)

Posted 一乐乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

 

hbase的安装配置

环境及版本:

Centos7 (64位)

JDK(1.8)

hadoop(3.1)

hbase(2.0.0)

为了避免版本导致的怪异问题,请多多注意!

在已经装好jdk和hadoop之后装hbase,此hadoop和hbase为分布式的

1.解压hbase2.0.0

2./bin/hbase-env.sh

配置JAVA_HOME路径为本机的路径

3./bin/hbase-site.xml

<configuration>
  	<property> 
		<!-- hbase存放数据目录 -->
		<name>hbase.rootdir</name> 
		<!-- 端口要和Hadoop的fs.defaultFS端口一致-->
		<value>hdfs://master:9000/hbase</value>
	</property>
	<property>
		<!--	HBase Web页面-->
		<name>hbase.master.info.port</name>
		<value>60010</value>
	</property>
	<property> 
		<!-- 是否分布式部署 -->
		<name>hbase.cluster.distributed</name> 
		<value>true</value> 
	</property> 
	<property> 
		<!-- list of  zookooper -->
		<name>hbase.zookeeper.quorum</name> 
		<value>master,slave1,slave2</value> 
	</property>     
	<property>
		<!-- 临时文件路径,如果使用系统默认的tmp会被清除 -->
 		<name>hbase.tmp.dir</name>
 		<value>/data/local/hbase/tmp</value>
	</property>
 	<property>
	  	<name>dfs.replication</name>
  		<value>1</value>
  	</property>
 	<property>
		<!-- ZK数据文件路径 -->
        	<name>hbase.zoopkeeper.property.dataDir</name>
        	<value>/data/local/zookeeper/zkdata</value>
    	</property>
	<property>
  		<name>hbase.zookeeper.property.clientPort</name>
  		<value>2181</value>
	</property>
    	<property>
		<name>hbase.unsafe.stream.capability.enforce</name>
		<value>false</value>
	</property>
	<property>
   		<name>hbase.table.sanity.checks</name>
    		<value>false</value>
  	</property>
  	<property>
  		<!-- phoenix支持索引 -->
		<name>hbase.regionserver.wal.codec</name>
		<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
	</property>
</configuration>

  4./bin/regionservers

  配置三台主机名,如果你没有改主机的名字,呢么应该是你的IP地址

  5.从phoenix中复制两个jar包过来(至于为什么?我也不知道,对了,phoenix版本5.0.0)

  Phoenix-5.0.0-HBase-2.0-server.jar

  Phoenix-core-5.5.0-HBase-2.0.jar

  6.创建,其中的临时文件夹

  7.拷贝hbase文件到其他机器,(你说他是怎么从别的机器上找到hbase文件的呢?因为同路径吗?没试过不同路径的)

  8.配置环境变量

  export HBASE_HOME=/data/local/hbase/hbase-2.0.0

  export PATH=$PATH:${HBASE_HOME}/bin

  source /etc/profile  //让环境变量生效

  9.如果你的环境变量生效了,随便在哪里  :命令   start-hbse.sh 

  10.检查成功状态  使用java中 jps命令 如果成功就会有下面两个进程(此文件并没有标注hadoop的运行中进程)

  master(主节点):

    HMaster

    HRegionServer(如果你的regionServers 文件中配置了主master,则在主节点上才有,如果没配就只有在salve上才有)

  salve(从节点):

    HRegionServer

  11.遇到的问题及解决

    0.HMaster死亡,日志信息:找不到DataNode,检查发现hadoop的DataNode没起来,检查hadoop的问题

    1.启动后发现HRegionServer死了,查看日志

       ABORTING region server slave1,16020,1547180831222: Unhandled: Unable to find  未找到

     缺少上述的Phoenix-5.0.0-HBase-2.0-server.jar包,去phoenix找个包吧(注意版本)

    2.启动后还是发现HRegionServer死了(或者个别的HRegionServer死了)  

      Server yfhadoopd3,60020,1357353729598 has been rejected; Reported time is too far out of sync with master.  Time difference of 33455ms > max allowed of       30000ms
     时间问题,hbase要求时间是同步的,我配置的时候时间是同步的,所以未配置时间同步,这是hbase很大的一个问题,默认的hbase时差容忍是30秒,当然可以修改配置,网上有无数个这样的教程,推荐ntp 将salve的时间和master的时间进行同步

    3.在启动的时候输出口输出了:    (slave1:)HBase SLF4J:Class path contains multiple SLF4J bindings

      正常的启动情况下我是没有出过这个问题的,我出现这个问题的同时伴随了下面的这个问题,但是这个问题可解,将hbase中的LOG4J包移除,可解这个错误,注意如果他是报的salve1包绑定冲突,就移除slave1的,如果是其他的就移除其他的

    4.HRegionServer 死亡,HMaster活着,甚至能进入shell命令行,但是stop-hbase.sh失败

      报错信息:2018-07-11 17:50:51,663 INFO  [main-SendThread(slave2:2181)] zookeeper.ClientCnxn: Opening socket connection to server slave2/192.168.1.130:2181. Will not attempt to authenticate using SASL (unknown error)

          2018-07-11 17:50:52,732 INFO  [ReadOnlyZKClient-slave1:2181,slave2:[email protected](slave1:2181)] zookeeper.ClientCnxn: Opening socket connection to server slave1/192.168.1.128:2181. Will not attempt to authenticate using SASL (unknown error)

          2018-07-11 17:50:57,623 ERROR [regionserver/slave1:16020] regionserver.HRegionServer: pache/hadoop/fs/ContentSummary; @98: invokestatic

          java.lang.VerifyError: Bad type on operand stack

          ERROR [regionserver/slave1:16020] regionserver.HRegionServer: RegionServer abort: loaded coprocessors are: []

      解决方法:将lib下的hadoop开头的所有包全部删除,从你的hadoop/share 文件夹下得到所有的hadoop开头的jar包移动到lib下,注意:此种方法我的确解决了hbase的这个错误,但是,随之而来的是各种各样的错误,我开始的时候安装过一个hbase,但是各种原因失败了,然后再次安装就报这个问题了。

    5.说一下遇到的各种各样的错误

      HRegionServer 死亡,HMaster活着,甚至能进入shell命令行,但是stop-hbase.sh失败

      Invalid host name: local host is: (unknown); destination host is: "HMaster":。。。找不到记录,大概就是说找不到HMaster 节点了,其实我的IP是有配置的,但是找不到

      将配置文件/conf/hbase-site.xml 中的HMaster换成你的IP地址

    6.HRegionServer 死亡,HMaster活着,甚至能进入shell命令行,但是stop-hbase.sh失败

     regionserver.HRegionServer: ***** ABORTING region server slave1,16020,154711。。***** 好吧,到这我崩溃了,感觉后面的这些问题都是随着问题4 出现的,所以根本上还是解决问题了,所以我重装了系统,运行良好(配置文件完全相同的呢~~,F***)

 


以上是关于HBase 安装之后版本的验证的bug:(错误的替换找不到或无法加载主类SLF4J)的主要内容,如果未能解决你的问题,请参考以下文章

我的验证错误消息未显示(Javascript)

zookeeper3.4.5+Hbase1.2.6安装教程

Hbase安装及配置

Ubuntu下为Hadoop安装配置Hbase教程

PHPRAP v1.0.8 版本发布,安装时数据库不存在自动创建

使用happybase访问HBase出现Broken pipe问题---两个“惊天”大bug