如何解决NoClassDefFoundError: org/apache/hadoop/hbase/TableNotFoundException
我打算使用“hbase.mapreduce.Import”将数据从本地文件导入到 Hbase。
我在 root 上执行了 hbase org.apache.hadoop.hbase.mapreduce.Import News file:///Hbackup/News/
。
但是,当我检查 Hadoop 容器时,我发现发生了错误。下面是master节点的syslog,和另一个slave节点一样:
2021-07-27 03:07:45,411 INFO [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Created MRAppMaster for application appattempt_1627349972787_0004_000001
2021-07-27 03:07:45,782 INFO [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Executing with tokens:
2021-07-27 03:07:45,782 INFO [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Kind: YARN_AM_RM_TOKEN,Service:,Ident: (appAttemptId { application_id { id: 4 cluster_timestamp: 1627349972787 } attemptId: 1 } keyId: -1057494481)
2021-07-27 03:07:45,934 INFO [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Using mapred newApiCommitter.
2021-07-27 03:07:46,605 INFO [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: OutputCommitter set in config null
2021-07-27 03:07:46,661 FATAL [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Error starting MRAppMaster
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/TableNotFoundException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:2134)
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2099)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2193)
at org.apache.hadoop.mapreduce.task.JobContextImpl.getOutputFormatClass(JobContextImpl.java:222)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster$1.call(MRAppMaster.java:474)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster$1.call(MRAppMaster.java:458)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.callWithJobClassLoader(MRAppMaster.java:1560)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.createOutputCommitter(MRAppMaster.java:458)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.serviceInit(MRAppMaster.java:377)
at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster$4.run(MRAppMaster.java:1518)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.initAndStartAppMaster(MRAppMaster.java:1515)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.main(MRAppMaster.java:1448)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.TableNotFoundException
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 18 more
2021-07-27 03:07:46,665 INFO [main] org.apache.hadoop.util.ExitUtil: Exiting with status 1
不幸的是,我在百度和必应上搜索了这个错误,找不到有用的文章,这是我找到的最相关的一篇: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/MasterNotRunningException
然后我检查了我的 Hadoop 类路径,Hbase jar 已经存在。
root@master:~# $HADOOP_HOME/bin/hadoop classpath
/usr/tools/hadoop/etc/hadoop:/usr/tools/hadoop/share/hadoop/common/lib/*:/usr/tools/hadoop/share/hadoop/common/*:/usr/tools/hadoop/share/hadoop/hdfs:/usr/tools/hadoop/share/hadoop/hdfs/lib/*:/usr/tools/hadoop/share/hadoop/hdfs/*:/usr/tools/hadoop/share/hadoop/yarn/lib/*:/usr/tools/hadoop/share/hadoop/yarn/*:/usr/tools/hadoop/share/hadoop/mapreduce/lib/*:/usr/tools/hadoop/share/hadoop/mapreduce/*:/usr/tools/hbase-2.3.5/lib/*:/usr/tools/hadoop/contrib/capacity-scheduler/*.jar
另外:
-
以下是版本:
JDK:1.8.0.291 动物园管理员:3.4.12 Hadoop:2.7.1 Hbase:2.3.5
-
我发现另一个java程序可以写Hbase,所以我相信Hbase是有效的。
现在我不知道这个错误,我应该怎么做才能解决这个问题? 感谢您的阅读和回答。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。