错误是:Exceptioninthread"main"java.lang.IllegalStateException:JobinstateDEFINEinsteadofRUNNINGatorg.apache.hadoop.mapreduce.Job.ensureState(Job.java:294)atorg.apache.hadoop.mapreduce.Job.getCounters(Job.java:762)atcom.aamend.hadoop.MapReduce.CountryIncomeConf.main(CountryIncomeConf.java:41)atsun.re
让我们考虑一下我在映射器中更改计数器值并想在缩减器中使用该信息的情况。看起来我们可以保证在所有映射器完成之前不会调用reduce函数。这是否考虑了正在推测执行的映射器?由于推测执行,reducer会看到不相关的值吗? 最佳答案 Reducers的执行时间由配置参数决定:mapreduce.job.reduce.slowstart.completedmaps(在mapred-site.xml中)。默认设置为“0.05”。这意味着,当大约5%的Mappers完成时,Reducers将被安排执行。您可以调整此参数以获得不同的结果。例如将其
我在hadoop中运行一个字数统计工作我的问题是为什么映射输出记录和减少hadoop计数器中的输入记录不同?请看下图 最佳答案 根据“合并输出记录”计数器,您的作业似乎使用了合并器。这就解释了为什么“减少输入记录”不等于“映射记录”。通过将1亿条记录缩减到数百条,组合器相当高效。然后您很可能会问为什么“合并输入记录”不等于“映射输出记录”以及为什么“合并输出记录”不等于“记录输入记录”。解释是组合器可以运行多次,这意味着您“实际上”对同一数据进行多次计数(在这里您可以观察到541条额外输入记录等于677-136,但不能保证这两个数字
我一直在努力寻找所有映射器使用MAP_INPUT_RECORDS变量解析的记录总数。这是我正在使用的代码:Counterscounters=job.getCounters();for(CounterGroupgroup:counters){System.out.println("*CounterGroup:"+group.getDisplayName()+"("+group.getName()+")");System.out.println("numberofcountersinthisgroup:"+group.size());for(Countercounter:group){Sy
我想从映射器外部向hadoop计数器添加一些内容。所以,我想像这样访问上下文对象上的getCounter:context.getCounter(counter,key).increment(amount)我无法从我开始作业的地方获取上下文对象。我只能做job.getCounters().findCounter()这不允许我向hadoop计数器添加内容。 最佳答案 您只能在映射器/缩减器任务中使用/写入计数器。作业跟踪器具有与计数器交互的内置功能,您真的不想干扰已经很复杂的设置。几个月前我遇到了这个问题,试图使用计数器来存储临时信息,
在hadoopui,我们可以在单独的列中看到标准的MR计数器:map-task、reduce-task和total。但我在hadoopjavaAPI中没有看到这样的方法.我们如何从javaapi中获得分离的计数器,例如如何获取Map和Reduce列的CPU时间花费(毫秒)值? 最佳答案 如果你想得到分离的任务计数器,你需要使用getTaskReports()你的hadoop工作的方法。之后,您可以使用getTaskCounter()和findCounter()方法分别为每个任务找到您需要的计数器。例如,如何获取您的mapgc-tim
我正在使用Oozie触发流式MapReduce作业,为此我想收集以下HadoopEL常量:MAP_IN:Hadoop映射器输入记录计数器名称。MAP_OUT:Hadoopmapper输出记录计数器名称。REDUCE_IN:Hadoopreducer输入记录计数器名称。REDUCE_OUT:Hadoopreducer输入记录计数器名称。我看到这些可以使用${hadoop:counters('mr-action')[RECORDS][REDUCE_OUT]}但是,我不知道如何让这些值通过STDOUT输出回屏幕,或者输出到我启动Oozie工作流的服务器上HDFS中的文件。我试过将这些值传递给
我的问题是,我如何制作计数器,以便我可以在其中放入double之类的东西(是的,我确实使用了LongValue但它给了我0)? 最佳答案 HadoopMapReduce作业计数器根据定义是Javalong值。MapReduce作业实现可以通过TaskAttemptContext获取Counter的句柄。http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/mapreduce/TaskAttemptContext.html#getCounter(java.lang.Enu
我是hadoop流媒体的新手。我的reduce代码中几乎没有过滤条件,我想知道有多少记录通过了这个条件。我开始知道我们可以通过编写自定义计数器来做到这一点。有人可以告诉我如何编写自定义计数器吗?我在映射器代码中发出三列,比如a,b,ckey是a,value是list,就像[b,c],从mapper代码中得到一个例子,就像['I'^['C','P']]这是我的归约代码。labels=["a","b"]forlineinsys.stdin:l=line.strip().split("^")key=l[0]value=l[1]record=[key]+valuerecords.append(
在Hadoop中,我们可以在map/reduce任务中增加计数器,它看起来像这样:...context.getCounter(MyCountersEnum.SomeCounter).increment(1);...你可以在日志中找到它们的值。作业完成后如何通过代码访问它们?什么是读取计数器值的HadoopAPI? 最佳答案 计数器代表全局计数器,由Map-Reduce框架或应用程序定义。每个计数器可以是任何枚举类型。您可以在Driver类中将计数器定义为枚举staticenumUpdateCount{CNT}然后在map/reduc