java - map 上的条件减少计数器以控制 map 输出

标签 java hadoop mapreduce counter

有没有机会在映射器级别控制映射器输出的用户定义的Java计数器上设置条件?

       Long l = context.getCounter(Counters.COUNT).getValue();

        if(5L >= l) {
            context.getCounter(Counters.COUNT).increment(1);
            context.write((LongWritable)key, value);
        } else {
            System.out.println("MAP ELSE");
            return;
        }

得到更多然后五个记录输入到 reducer 。
有没有机会控制这个。???

最佳答案

您不能这样做,如果您的输入文件有3个拆分,那么您将运行3个映射器。每个映射器将具有其单独的计数值(取决于逻辑如何增加计数值),并且只有在所有映射器在混洗阶段之后完成后,才能在缩减方面知道。

如果要限制 map 输出。然后只有一个reducer job.setNumReduceTasks(1)并限制来自reducer的输出。这样的事情。

public static class WLReducer2 extends
        Reducer<IntWritable, Text, Text, IntWritable> {
    int count=0;
    @Override
    protected void reduce(IntWritable key, Iterable<Text> values,
            Context context) throws IOException, InterruptedException {

        for (Text x : values) {
            if (count < 5)
            context.write(key, x);
            count++;
        }

    };
}

如果您想在减少端获得计数器值。您可以将其添加到reduce设置方法中。
 @Override
    public void setup(Context context) throws IOException, InterruptedException{
        Configuration conf = context.getConfiguration();
        Cluster cluster = new Cluster(conf);
        Job currentJob = cluster.getJob(context.getJobID());
        mapperCounter = currentJob.getCounters().findCounter(COUNTER_NAME).getValue();  
    }

关于java - map 上的条件减少计数器以控制 map 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33013165/

相关文章:

hadoop - 如何在HDFS中识别新文件

hadoop - spark2-shell 中的 Log4j

java - Map/Reduce wall-time 对 Reduce 任务的数量不敏感

java - 我应该在哪里保存 JDBC 连接详细信息?

java - 在 JLabel 上设置大小会取代 java 中的其他组件

sql - Hive 和选择不匹配的记录

hadoop - 通过 spark job 创建 hive 表

mapreduce - 使用 CouchDB View ,我可以同时计算组数并按键范围过滤吗?

java - Java (SE8) 中不允许的通用类型数组如何工作?

java - 使用 Spring Boot 将 QR 码创建为 Base64 字符串