1. 程式人生 > >Hbase2.1.0啟動失敗解決方案積累

Hbase2.1.0啟動失敗解決方案積累

當前CentOS,JDK和Hadoop版本:

[[email protected] ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

[[email protected] ~]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

[[email protected]
~]# hadoop version Hadoop 3.0.3 Source code repository https://[email protected]-wip-us.apache.org/repos/asf/hadoop.git -r 37fd7d752db73d984dc31e0cdfd590d252f5e075 Compiled by yzhang on 2018-05-31T17:12Z Compiled with protoc 2.5.0 From source with checksum 736cdcefa911261ad56d2d120bf1fa This command was run using /
usr/local/hadoop/share/hadoop/common/hadoop-common-3.0.3.jar

啟動遇到的坑點

問題一:

問題描述:啟動hbase時報出如下Class path contains multiple SLF4J bindings錯誤:

[[email protected] ~]# start-hbase.sh 
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] ...

解決方法:說明是這個slf4j-log4j12-1.7.25.jar和包跟其他的class path中包含的與此類似的jar包重複了,所以,應該去掉對應的jar包。
31
登入到每個結點上刪除這個jar包即可。

[[email protected] ~]# rm -rf /usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar
[[email protected] ~]# rm -rf /usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar
[[email protected] ~]# rm -rf /usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar
[[email protected] ~]# rm -rf /usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar

問題二:

RegionServer程序啟動沒幾秒就消失,檢視日誌,發現報錯如下:

[[email protected] ~]# vim /usr/local/hbase/logs/hbase-root-regionserver-ceph1.log 
2018-12-10 21:26:11,474 ERROR [main] regionserver.HRegionServer: Failed construction RegionServer
java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder
        at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:635)
        at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:619)
        at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
        at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)
        at org.apache.hadoop.hbase.util.CommonFSUtils.getRootDir(CommonFSUtils.java:358)
        at org.apache.hadoop.hbase.util.CommonFSUtils.isValidWALRootDir(CommonFSUtils.java:407)
        at org.apache.hadoop.hbase.util.CommonFSUtils.getWALRootDir(CommonFSUtils.java:383)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.initializeFileSystem(HRegionServer.java:691)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:600)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.constructRegionServer(HRegionServer.java:2991)
        at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.start(HRegionServerCommandLine.java:63)
        at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.run(HRegionServerCommandLine.java:87)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:149)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.main(HRegionServer.java:3009)
Caused by: java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 24 more

核心問題就兩句話:

1)java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder
2)Caused by: java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder

解決方法如下:

[[email protected] ~]# cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/

這裡我的完整路徑是:
11
再次啟動,不論刷幾次jps,媽媽再也不用擔心我的HRegionServer一會就消失啦~:

[[email protected] ~]# hbase-daemon.sh start regionserver
[[email protected] ~]# hbase-daemon.sh start regionserver
[[email protected] ~]# hbase-daemon.sh start regionserver

在這裡插入圖片描述

問題三:

剛解決完問題二,成功啟動了HRegionServer,回到主節點啟動HMaster又失敗了 ̄へ ̄
HMaster程序啟動沒幾秒就消失,檢視日誌,發現報錯如下:

2018-02-08 17:26:54,256 ERROR [Thread-14] master.HMaster: Failed to become active master 
java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper 
operation during component failures, but the underlying filesystem does not support doing so. 
Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired 
level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem 
mount that can provide it.
        at org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.rollWriter(WALProcedureStore.java:1044)
        at org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.rollWriter(WALProcedureStore.java:1044)
2018-12-10 22:06:39,256 ERROR [Thread-14] master.HMaster: Failed to become active master
        at org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.rollWriter(WALProcedureStore.java:1044)
        at org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.rollWriter(WALProcedureStore.java:1044)
        at java.lang.Thread.run(Thread.java:748)

解決方法如下:
hbase-site.xml中新增如下屬性:

[[email protected] ~]# vim /usr/local/hbase/conf/hbase-site.xml

下面這個屬性主要作用是禁止檢查流功能(stream capabilities)[hflush/hsync]

<property>
  <name>hbase.unsafe.stream.capability.enforce</name>
  <value>false</value>
</property>

再次啟動,不論刷幾次jps,媽媽再也不用擔心我的HMaster一會就消失啦~:

[[email protected] ~]# hbase-daemon.sh start master

在這裡插入圖片描述

持續積累中~