hadoop mapreduce错误:org.apache.hadoop.mapreduce.counter

fgw7neuy  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(387)

我尝试在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中的计数器,map方法中只有一行是这样的:

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

如果我在减速机上试用过,它是在清理中:

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

然后我实现了计数器的枚举,如下所示:

public enum MyCounters {
    Documents
}

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

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

不幸的是,似乎有没有为我工作的任何操作与计数器。除了我上面描述的以外,还有其他一些具体的方法来初始化计数器吗?
我在ibmbiginsights示例上使用hadoopversion1.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示例上尝试了我的map reduce程序,我把它放在虚拟盒子里,它看起来像我预期的那样工作。在hadoop版本命令之后,我得到:

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方面存在问题?

wixjitnu

wixjitnu1#

不,问题与单节点示例无关。您需要升级在ibmbiginsights上运行的hadoop版本。它在cloudera的沙盒上取得了成功,因为它运行的是Hadoop2。
hadoop 2 api与hadoop 1 api不兼容。

相关问题