要运行MapReduce作业首先要编写MR程序。
MR程序主要包括三个部分:Map类,Reduce类和驱动类。
定义一个反向索引的例子,首先需要定义map类,reduce类需要将输入数据中的每个单词单独显示一行,那么map 的输出key应该是输入文件中的每个单词,然后MR将这些key合并到一起,每个key 的值将包含文件名
map类代码:
public static class Map extends Mapper<LongWritable, Text, Text, Text> {
//在扩展MR的mapper类时,需要确定输入和和输出的键值的数据类型。在作业中使用MR默认的InputFormat,该类将输入文件中的字节偏移量作为键,将每一行的数据作为值
private Text documentId; //输入以文本对象的形式存储文件名
private Text word = new Text(); //为了减少对象的创建,需要创建一个可以复用的单一的文本对象
@override
protected void setup(Context context){ //上下文中提取文件名
//setup方法在map方法调用之前执行,使用这个机会存储map中的输入文件名
String filename = ((FileSplit)context.getInputSplit()).getPath().getName();
documentId = new Text(filename);
}
public