mapreduce操作hbase报错NoClassDefFoundError

发布于 2021-11-25 22:58:40 字数 899 浏览 764 评论 3

下面是具体的报错信息,执行方式:/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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

皇甫轩 2021-11-29 13:10:16

复制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

笑红尘 2021-11-29 03:45:45

问题解决了,我把hbase目录下的lib复制到hadoop下了, 虽然比较扯的方法,但是解决了,还有一种方法就是打成可执行的jar包,直接打进包里

风柔一江水 2021-11-28 22:53:36


HBASE_CLASSPATH改为JAVA_CLASSPATH,配置如下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文