gpt4 book ai didi

java - Hadoop MapReduce错误: org. apache.hadoop.mapreduce.Counter

转载 作者:行者123 更新时间:2023-12-01 13:07:33 26 4
gpt4 key购买 nike

我试图在 MapReduce 程序中使用计数器,但每当我尝试增加它时,我都会收到以下错误:

14/04/18 12:22:51 INFO mapred.JobClient: Task Id : attempt_201404172237_0052_m_000003_0, Status : FAILED
Error: org.apache.hadoop.mapreduce.Counter

然后,当我尝试读取计数器的值时,出现以下异常:

Exception in thread "main" java.lang.IncompatibleClassChangeError: org.apache.hadoop.mapreduce.Counter
at com.zikesjan.bigdata.TfIdfMain.main(TfIdfMain.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

当我尝试从 Mapper 或Reducer 实现它时,就会发生这种情况。我的实现如下所示:

如果我使用 Mapper 中的计数器,它只是映射方法中的一行,如下所示:

context.getCounter(MyCounters.Documents).increment(1);

如果我从Reducer中尝试过它,它正在清理中:

public void cleanup(Context context){
context.getCounter(MyCounters.Documents).increment(numberOfRows);
}

然后我像这样实现了计数器的枚举:

public enum MyCounters {
Documents
}

在我的主类中,我想检索计数器的值,如下所示:

long documents = countLines.getCounters().findCounter(MyCounters.Documents).getValue();

不幸的是,似乎对我来说没有任何计数器操作。除了我上面描述的之外,还有其他一些必须初始化计数器的特定方法吗?

我在 IBM BigInsights 实例上使用 Hadoop 版本 1.1.1(如果此信息与问题相关)。特别是当我输入 hadoop 版本时,我得到:

Hadoop 1.1.1
Subversion git://dasani.svl.ibm.com/ on branch (no branch) -r f0025c9fd25730e3c1bfebceeeeb50d930b4fbaa
Compiled by jenkins on Fri Aug 9 17:06:14 PDT 2013
From source with checksum 21fb4557d5057d18b673b3fd46176f95

预先感谢您的帮助。

编辑:我已经在虚拟机中的玩具单节点 Cloudera Hadoop 实例上尝试了 MapReduce 程序,看起来它按我的预期工作。在此处的 hadoop version 命令之后我得到:

Hadoop 2.0.0-cdh4.4.0
Subversion file:///data/1/jenkins/workspace/generic-package-rhel64-6-0/topdir/BUILD/hadoop-2.0.0-cdh4.4.0/src/hadoop-common-project/hadoop-common -r c0eba6cd38c984557e96a16ccd7356b7de835e79
Compiled by jenkins on Tue Sep 3 19:33:17 PDT 2013
From source with checksum ac7e170aa709b3ace13dc5f775487180

所以我的问题是:

1) 计数器在 Cloudera 为我工作的原因只是因为它是单节点实例吗?或者计数器应该在多节点实例上工作吗?因此,只有 IBM BigInsights 方面有问题?

最佳答案

不,该问题与单节点实例无关。您需要升级在 IBM Biginsights 上运行的 Hadoop 版本。它在 Cloudera 的 Sandbox 上取得了成功,因为它运行的是 Hadoop 2。

Hadoop 2 API 与 Hadoop 1 API 不兼容。

关于java - Hadoop MapReduce错误: org. apache.hadoop.mapreduce.Counter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23152550/

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