NoClassDefFoundError при запуске HBase, в zookeeper нет ошибок - PullRequest
1 голос
/ 29 апреля 2019

Я создал автономный кластер hadoop, используя этот учебник.Затем я установил HBase поверх hadoop, следуя этому учебнику.

Я запустил Hadoop по

cd /usr/local/hadoop/sbin/
./start-all.sh

и HBase по

cd /usr/local/hbase/bin
./start-hbase.sh

Затем, когда я делаю jps, я получаю:

3761 Jps
835 NameNode
966 DataNode
3480 HMaster
3608 HRegionServer
1465 ResourceManager
1610 NodeManager
3418 HQuorumPeer
1150 SecondaryNameNode

Но через некоторое время он показывает:

1779 SecondaryNameNode
1557 DataNode
2870 HQuorumPeer
2200 NodeManager
2061 ResourceManager
3246 Jps
1423 NameNode

Так что это довольно большой показатель того, что что-то не так.Теперь я проверил логи zookeeper в /usr/local/hbase/logs/hbase-hduser-zookeeper-stal.log и он показал:

2019-04-29 07:54:45,677 INFO  [main] server.ZooKeeperServer: Server environment:java.io.tmpdir=/tmp
2019-04-29 07:54:45,677 INFO  [main] server.ZooKeeperServer: Server environment:java.compiler=<NA>
2019-04-29 07:54:45,677 INFO  [main] server.ZooKeeperServer: Server environment:os.name=Linux
2019-04-29 07:54:45,678 INFO  [main] server.ZooKeeperServer: Server environment:os.arch=amd64
2019-04-29 07:54:45,678 INFO  [main] server.ZooKeeperServer: Server environment:os.version=4.15.0-47-generic
2019-04-29 07:54:45,678 INFO  [main] server.ZooKeeperServer: Server environment:user.name=hduser
2019-04-29 07:54:45,678 INFO  [main] server.ZooKeeperServer: Server environment:user.home=/home/hduser
2019-04-29 07:54:45,678 INFO  [main] server.ZooKeeperServer: Server environment:user.dir=/home/hduser
2019-04-29 07:54:45,782 INFO  [main] server.ZooKeeperServer: tickTime set to 3000
2019-04-29 07:54:45,782 INFO  [main] server.ZooKeeperServer: minSessionTimeout set to -1
2019-04-29 07:54:45,782 INFO  [main] server.ZooKeeperServer: maxSessionTimeout set to 90000
2019-04-29 07:54:46,780 INFO  [main] server.NIOServerCnxnFactory: binding to port 0.0.0.0/0.0.0.0:2181

, что не похоже ни на какую ошибку.

Итак, я проверил ошибки HBase в /usr/local/hbase/logs/hbase-hduser-master-stal.logи я получил:

2019-04-29 07:55:11,513 ERROR [main] master.HMasterCommandLine: Master exiting
java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster.
        at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:3100)
        at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:236)
        at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:140)
        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.master.HMaster.main(HMaster.java:3111)
Caused by: java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder
        at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:644)
        at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:628)
        at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:93)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2701)
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2683)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:372)
        at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)
        at org.apache.hadoop.hbase.util.CommonFSUtils.getRootDir(CommonFSUtils.java:362)
        at org.apache.hadoop.hbase.util.CommonFSUtils.isValidWALRootDir(CommonFSUtils.java:411)
        at org.apache.hadoop.hbase.util.CommonFSUtils.getWALRootDir(CommonFSUtils.java:387)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.initializeFileSystem(HRegionServer.java:704)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:613)
        at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:489)
        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.master.HMaster.constructMaster(HMaster.java:3093)
        ... 5 more
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)
        ... 25 more

Был аналогичный вопрос , на который ответил по:

HBase 2.1.0 releaseиспользует HTrace, то есть инкубационный проект Apache Foundation.

В папке HBase lib есть папка для сторонних библиотек, обращенная к клиенту-третьего лица.Вам нужно скопировать оттуда htrace-core-3.1.0-инкубационный.jar в каталог lib HBase.( см. Ссылку )

Существует также другое решение в Cloudera Community , которое изменяет конфигурацию вместо добавления библиотеки вручную.

Первое решение включает в себя:

  1. HMaster отказывается запускаться из-за следующей ошибки:

Java.lang.RuntimeException: Сбой построения Master: класс org.apache.hadoop.hbase.master.HMaster Причина: java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder

Это потому, что в hbase 2.0 у нас есть 2 разные версии htrace-core.x.x.x.incubating.jar

cd /usr/local/hbase/lib/client-facing-thirdparty/:
htrace-core-3.1.0-incubating.jar
htrace-core-4.2.0-incubating.jar

В настоящее время только версия 3.1.0 имеет требуемый класс SamplerBuilder.Нам нужно удалить версию 4.2.0:

mv htrace-core-4.2.0-incubating.jar htrace-core-4.2.0-incubating.jar.bak Но, когда я сделал cd для /usr/local/hbase/lib/client-facing-thirdparty и сделать ls -a, я получаю:

.   audience-annotations-0.5.0.jar  findbugs-annotations-1.3.9-1.jar   log4j-1.2.17.jar      slf4j-log4j12-1.7.25.jar
..  commons-logging-1.2.jar         htrace-core4-4.2.0-incubating.jar  slf4j-api-1.7.25.jar

Как видите, существует только один htrace файл, а не два.Итак, я скачал htrace-3.1.0, с здесь , скопировал его в /usr/local/hbase/lib/client-facing-thirdparty и переименовал htrace-core4-4.2.0-incubating.jar в htrace-core4-4.2.0-incubating.jar.bak.Затем я перезапустил hadoop и HBase.Все еще без изменений.jps не показывал HMaster и HRegionServer сейчас.


HBase файлы конфигурации:

<configuration>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/user/hduser/hbase</value>
</property>

<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
</property>

<property> 
<name>hbase.master</name> 
<value>localhost:60010</value> 
</property>

<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>

<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>hdfs://localhost:9000/user/hduser/zookeeper</value>
</property>
<property>
        <name>hbase.tmp.dir</name>
        <value>/hbase/tmp</value>
        <description>Temporary directory on the local filesystem.</description>
</property>
</configuration>

И hbase-env.sh выглядит так:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HBASE_REGIONSERVERS=/usr/local/hbase/conf/regionservers
export HBASE_MANAGES_ZK=true
export HBASE_PID_DIR=/var/hbase/pids
export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC"

Итак, что мне теперь делать?Любая помощь приветствуется.

...