gpt4 book ai didi

java - 无法访问 MapReduce 的 reducer 类中的计数器

转载 作者:可可西里 更新时间:2023-11-01 14:23:19 25 4
gpt4 key购买 nike

我通过以下方式增加映射器的计数器

public static class TokenizerMapper
extends Mapper<Object, Text, Text, FloatWritable>{
public static enum MyCounters { TOTAL };
context.getCounter(MyCounters.TOTAL).increment(1);

.

我试图通过以下方式在 reducer 类中获取此计数器的值。

@Override
public void setup(Context context) throws IOException ,InterruptedException{
Configuration conf = context.getConfiguration();
Cluster cluster = new Cluster(conf);
Job currentJob = cluster.getJob(context.getJobID());
Counters counters = currentJob.getCounters();
Counter counter = counters.findCounter(TokenizerMapper.MyCounters.TOTAL);

但是当我运行代码时,
它总是给出一个

java.lang.NullPointerException at the last line
cluster.getJob(context.getJobID())

它总是返回 null。

我尝试了其他方法来访问在 reducer 的映射器中递增的计数器,但没有成功。

有人可以向我解释问题到底是什么以及我如何从 reducer 访问计数器。我需要总计数的值来计算单词的百分比。

这是我的驱动代码。

Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(FloatWritable.class);
job.setNumReduceTasks(1);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);

最佳答案

我正在使用 Hadoop 2.7.0。

您无需实例化集群即可访问 reducer 中的计数器。

在我的映射器中,我有以下代码:

// Define a enum in the Mapper class 
enum CustomCounter {Total};

// In the map() method, increment the counter for each record
context.getCounter(CustomCounter.Total).increment(1);

在我的 reducer 中,我按如下方式访问计数器:

Counter counter = context.getCounter(CustomCounter.Total);

它非常适合我。

以下是我的 maven 依赖项:

<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>

关于java - 无法访问 MapReduce 的 reducer 类中的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34171191/

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