我正在尝试运行 MapReduce 作业来扫描 HBase 表。目前我使用的是Cloudera 4.4附带的HBase 0.94.6版本。在我的程序中的某个时刻,我使用 Scan(),并使用以下命令正确导入它:
import org.apache.hadoop.hbase.client.Scan;
它编译得很好,我也能够创建一个 jar 文件。我通过传递来做到这一点hbase classpath
作为 -cp 选项的值。运行程序时,我收到以下消息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/client/Scan
我使用以下命令运行代码:
hadoop jar my_program.jar MyJobClass -libjars <list_of_jars>
其中 list_of_jars 包含 /opt/cloudera/parcels/CDH/lib/hbase/hbase.jar。为了再次检查,我确认 hbase.jar 包含 Scan。我用以下方法来做:
jar tf /opt/cloudera/parcels/CDH/lib/hbase/hbase.jar
我可以看到这一行:
org/apache/hadoop/hbase/client/Scan.class
在输出中。对我来说一切看起来都很好。我不明白为什么说 Scan 未定义。我传递了正确的罐子,它包含该类。
任何帮助表示赞赏。
设置 HADOOP_CLASSPATH 变量修复了该问题:
export HADOOP_CLASSPATH=`/usr/bin/hbase classpath`
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)