![](https://csdnimg.cn/release/download_crawler_static/86372892/bg3.jpg)
文件先被处理成<key, value>的形式,根据不同的 Format 函数处理,比如这
里采用的 TextInputFormat,那么文件处理之后得到 key 是每个数据记录在数据分
片中的直接偏移量,value 就是每行的数据。
<0, java python c>
<1, python shell java>
上面就作为 map 函数的输入,map 函数的输出也是<key, value>,我们这个
例子期望的输出是<word, 1>,所以 map 输出结果的 key 是 Text , value 是
IntWrite。
context 也会记录 map 运行的状态
reduce 函数定义如下:
public void reduce(Text key, Iterable<IntWritable> values, Context
context)
values 是迭代器类型的,也就是说 reduce 输入的 key 对应的是一组值的 value,
reduce 中的 context 和 map 中的 context 作用一样。
在 main 函数中
Configuration conf = new Configuration();
mapreduce 程序运行前要初始化 Configuration,这个类主要是读取 mapreduce
系统配置信息,信息包括 HDFS 和 mapreduce,也就是读取 hadoop 的配置文件
(core-site.xml、hdfs-site.xml、mapred-site.xml 等)。
String[] otherArgs = new GenericOptionsParser(conf,
args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
}
运行程序的时候必须指定两个参数,分别是输入和输出的位置。这个时候只
是判断输入和输出参数在不在,并没有检查输入输出是否有效。真正的检查是在
提交 job 的时候进行的,那个时候 mapreduce 才访问到 hdfs。