mapreduce操作hbase报错NoClassDefFoundError
下面是具体的报错信息,执行方式:/opt/cloudera/parcels/CDH/bin/hadoop jar mapreduce.jar
查了官方文档,可以通过制定hadoop_classpath实现,但是我效,操作如下:
第一步:指定环境变量 HADOOP_CLASSPATH=`/opt/cloudera/parcels/CDH/bin/hbase classpath`:` /opt/cloudera/parcels/CDH/bin/hadoop classpath`
第二步:执行/opt/cloudera/parcels/CDH/bin/hadoop jar mapreduce.jar
指不指定HADOOP_CLASSPATH都会出错,结果应该是jar包还是没有引入进去,但是我通过echo $HADOOP_CLASSPATH |grep high-scale-lib-1.1.1.jar 是可以查到该包的,奇怪,求大神支招
直接用mapreduce是OK的,就是操作hbase会出错,http://hbase.apache.org/book.html#hbase.mapreduce.classpath 这是官方解释
44. HBase, MapReduce, and the CLASSPATH
By default, MapReduce jobs deployed to a MapReduce cluster do not have access to either the HBase configuration under $HBASE_CONF_DIR or the HBase classes.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
复制hbase下lib中的jar包到hadoop下的脚本
#!/bin/sh
base=/opt/cloudera/parcels/CDH-5.2.5-1.cdh5.2.5.p0.3/lib/hbase/lib
find=/opt/cloudera/parcels/CDH-5.2.5-1.cdh5.2.5.p0.3/lib/hadoop/lib/
for i in `ls $base`
do
if [ -d $base/$i ];then
echo "dir $i"
else
#echo $i
val=`find $find -name $i`
#echo $val
if [ -z $val ]; then
# echo "Not Find $val"
echo "cp $base/$i $find/$i"
cp $base/$i $find/$i
else
echo "Find $val"
fi
fi
done
问题解决了,我把hbase目录下的lib复制到hadoop下了, 虽然比较扯的方法,但是解决了,还有一种方法就是打成可执行的jar包,直接打进包里
将
HBASE_CLASSPATH改为JAVA_CLASSPATH,配置如下