使用hbase.mapreduce.Import导数据报TableNotFoundException类缺失如何解决
问题根因
你遇到的类找不到错误,本质是YARN集群运行MapReduce任务的节点(包括ApplicationMaster和Map任务执行节点)的运行环境没有加载到HBase的依赖包,你在提交任务的主节点查看到的hadoop classpath只保证客户端提交阶段可以正常加载类,不生效于集群侧的任务运行环境。
解决方案
单次任务临时生效方案(推荐)
执行导入命令前先设置HADOOP_CLASSPATH环境变量,将HBase的全量类路径传递给MR任务,命令如下:
export HADOOP_CLASSPATH=`hbase classpath` hbase org.apache.hadoop.hbase.mapreduce.Import News file:///Hbackup/News/
如果上述命令依然报错,可以追加-libjars参数主动将HBase依赖包分发到集群执行节点:
export HADOOP_CLASSPATH=`hbase classpath` hbase org.apache.hadoop.hbase.mapreduce.Import \ -libjars $(echo /usr/tools/hbase-2.3.5/lib/*.jar | tr ' ' ',') \ News file:///Hbackup/News/
永久生效方案(适合频繁运行HBase相关MR任务的场景)
- 将
/usr/tools/hbase-2.3.5/lib/下的所有jar包同步到集群所有节点(主节点、从节点都要同步)的$HADOOP_HOME/share/hadoop/common/lib/目录下 - 重启HDFS、YARN服务后即可永久生效
可选排查点
如果上述操作后依然报错,可以检查HBase 2.3.5与Hadoop 2.7.1的依赖冲突:比如常见的guava版本冲突,删除Hadoop自带的低版本guava jar包,保留HBase带的高版本即可。
内容的提问来源于stack exchange,提问作者JockeyWang
相关产品推荐
相关产品推荐

