创建了多少个Mapper类实例,它们是否共享数据?

时间:2018-06-06 17:36:50

标签: java hadoop mapreduce bigdata distributed-computing

据我所知,hadoop为每个输入拆分创建一个映射器任务,这些映射器任务应该彼此独立。但是,我发现实例变量可以在mapper任务之间以某种方式共享!

检查下面的代码是修改过的WordCount示例。如果变量IntWritable xyz是一个实例变量,我们应该在输出中看到每个单词后跟一个数字2.我的reducer除了写下键和值之外什么都不做:

public static class TokenizerMapper
   extends Mapper<Object, Text, Text, IntWritable>{

private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
private final IntWritable xyz = new IntWritable(1);

public void map(Object key, Text value, Context context
                ) throws IOException, InterruptedException {
  StringTokenizer itr = new StringTokenizer(value.toString());

     int x = xyz.get();
     x++;
     xyz.set(x);

  while (itr.hasMoreTokens()) {
    word.set(itr.nextToken());
    //context.write(word, one);

    context.write(word, xyz);
  }
}

然而实际输出如下: A 4 Apache 2 Hadoop 2 横跨3 允许3 一个4 和7 申请4 集群3 计算5 电脑5 数据集3 设计6 分发3 每个7 环境4 框架工作4 框架2 从6开始 在4 是2 java 2 大3 当地7 机器6 模特3 5 提供7 打开2 处理3 编程3 提供5 规模6 服务器6 简单3 单身6 来源2 存储5 那3 数千6 到6 6点 使用3 作品4 写了2

所以我想也许只有一个Mapper实例?但是hadoop如何在具有不同JVM的多个节点上使用一个实例?

0 个答案:

没有答案