Context对象在hadoop中的工作方式?

时间:2017-10-21 15:12:55

标签: hadoop mapper

我正在学习hadoop。对于字数统计,我有一些mapper代码。它与一个已经存在于堆栈溢流中的问题相同,但这个答案无法满足我们的疑虑。

package com.company;

import org.apache.hadoop.io.IntWritable;import import org.apache.hadoop.io.LongWritable;org.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;

public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    @Override
    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        String line = value.toString();
        for (String word : line.split(" ")) {

            if (word.length() > 0) {
                context.write(new Text(word), new IntWritable(1));
            }

        }

    }

}

在这里我们可以看到Mapper类的map方法被覆盖并且Context上下文出现了。当我打开hadoop jar文件时发现Context是hadoop库中Mapper类中的一个抽象类,它实现了MapContext接口,如下所示

public abstract class Context implements MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
        public Context() {
        }
    }

我的怀疑:

  1. 在我的WordCountMapper代码中,Context对象存储输出键值对。数据如何存储到Context对象中?这是一种清单吗?我可以在库中实现它吗?

  2. 谁在创建Context类对象?既然它是一个抽象类,哪一个是具体类呢?

  3. 是否hadoop框架本身创建了一个Context对象,我们将数据复制到HDFS中?它是如何产生的?

  4. 有什么建议吗?

0 个答案:

没有答案