集群提交HBase代码报错:Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguratio

原因分析

HBase官网 已经告诉我们原因以及解决方法了:
原因:
默认情况下,部署到MapReduce群集的MapReduce作业无法访问$ HBASE_CONF_DIR下的HBase配置或HBase类。

解决方法:
要为MapReduce作业提供所需的访问权限,可以将hbase-site.xml_添加到_ $ HADOOP_HOME / conf并将HBase jar添加到$ HADOOP_HOME / lib目录。 然后,您需要在整个集群中复制这些更改。 或者,您可以编辑$ HADOOP_HOME / conf / hadoop-env.sh并将hbase依赖项添加到HADOOP_CLASSPATH变量中。 不推荐使用这两种方法,因为这会使用HBase引用污染您的Hadoop安装。 它还要求您重新启动Hadoop集群,然后Hadoop才能使用HBase数据。

推荐方法:
推荐的方法是让HBase添加其依赖项jar并使用HADOOP_CLASSPATH或-libjars。

具体实操

首先看IDEA中使用Maven打的Jar包:
集群提交HBase代码报错:Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguratio_第1张图片
能出现:

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguratio

这样的报错,显然是因为我使用了不带依赖的Jar包,之前提交Spark代码因为CDH集群默认把Spark依赖添加到了HADOOP_CLASSPATH变量中,因此我就选择的不带依赖的jar包,毕竟很小嘛。但是如果没有手动把所有节点的HBase依赖添加到HADOOP_CLASSPATH变量中,就会报上面的错。所以,这里必须选择代带依赖的Jar包。

提交方式

  • Hadoop命令
    格式:
    hadoop jar 打好的jar包 类的全路径(如果没有在pom文件中写的话)
hadoop jar HBaseApp-1.0-SNAPSHOT-jar-with-dependencies.jar com.HBaseTest
  • Java命令

如果java定义了jar包的main class入口,则使用如下命令

java -jar HBaseApp-1.0-SNAPSHOT-jar-with-dependencies.jar

如果Java没有定义jar的main class入口,则使用如下命令

java -cp HBaseApp-1.0-SNAPSHOT-jar-with-dependencies.jar com.HBaseTest

你可能感兴趣的:(HBase,HBase)