MapReduce作业无法读取HBase(抛出java.lang.NoClassDefFoundError)

时间:2015-03-20 12:40:11

标签: java hadoop hbase cloudera

我的目标是在Cloudera集群上运行一个简单的MapReduce作业,该集群从虚拟HBase数据库读取并写入HDFS文件

一些重要说明:   - 我已经成功运行了将HDFS文件作为输入的MapReduce作业    并在此之前写入HDFS文件作为此群集的输出。   - 我已经将用于编译项目的库从“纯粹的”HBase替换为HBase-cloudera jar   - 当我以前遇到过这种问题时,我曾经只是将一个lib复制到分布式缓存中(使用Google Guice为我工作):     JobConf conf = new JobConf(getConf(),ParseJobConfig.class);     DistributedCache.addCacheFile(新URI(“/ user / hduser / lib / 3.0 / guice-multibindings-3.0.jar”),conf); 但现在它不起作用,因为HBaseConfiguration类用于创建配置(在配置存在之前)   - Cloudera版本为5.3.1,Hadoop版本为2.5.0

这是我的驱动程序代码:

public class HbaseJobDriver {
    public static void main(String[] args) throws Exception {
    Configuration conf = HBaseConfiguration.create();
    Job job = new Job(conf, "ExampleSummaryToFile");
    job.setJarByClass(HbaseJobDriver.class);

    Scan scan = new Scan();
    scan.setCaching(500); 
    scan.setCacheBlocks(false);

    TableMapReduceUtil.initTableMapperJob("Metrics", 
    scan, 
    HbaseJobMapper.class,
    Text.class,
    IntWritable.class, 
    job);

    job.setReducerClass(HbaseJobReducer.class); 
    job.setNumReduceTasks(1);
    FileOutputFormat.setOutputPath(job, new Path(args[0]));
  }
}

我不确定是否需要mapper / reducer类来解决这个问题。

我得到的例外是:     线程“main”中的异常java.lang.NoClassDefFoundError:org / apache / hadoop / hbase / HBaseConfiguration

3 个答案:

答案 0 :(得分:1)

我们刚刚和我的同事一起解决了这个问题,在我们的案例中我们需要更新.bashrc文件:

  1. nano ~/.bashrc
  2. 将库放到类路径中,如下所示:
  3. HBASE_PATH=/opt/cloudera/parcels/CDH/jars

    export HADOOP_CLASSPATH=${HBASE_PATH}/hbase-common-0.98.6-cdh5.3.1.jar:<ANY_OTHER_JARS_REQUIRED>

    1. 不要忘记重新加载bashrc:
    2. . .bashrc

答案 1 :(得分:0)

试试这个。

export HADOOP_CLASSPATH =“/ usr / lib / hbase / hbase.jar:$ HADOOP_CLASSPATH”

在/etc/hadoop/conf/hadoop-env.sh文件中添加以上属性或从命令行设置

答案 2 :(得分:0)

错误Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration是由于缺少HBase jar。

如果@sravan说不起作用,那么尝试在你的驱动程序代码(导入部分)中导入HBaseConfiguration,如下所示:

import org.apache.hadoop.hbase.HBaseConfiguration;