gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:56:30 25 4
gpt4 key购买 nike

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

一些重要的注意事项: - 我已成功运行将 HDFS 文件作为输入的 MapReduce 作业 并在此集群上作为输出写入 HDFS 文件。 - 我已经将用于从“纯”HBase 编译项目的库替换为 HBase-cloudera jar - 当我以前遇到这种问题时,我曾经只是将一个库复制到分布式缓存中(使用 Google Guice 为我工作): JobConf conf = new JobConf(getConf(), ParseJobConfig.class); DistributedCache.addCacheFile(new 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

最佳答案

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

  1. nano ~/.bashrc
  2. 像这样将库放到类路径中:

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:

. .bashrc

关于java - MapReduce 作业无法从 HBase 读取(抛出 java.lang.NoClassDefFoundError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29166743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com