Hadoop之MapReduce实验报告

一、实验题目
编写MapReduce程序Dictionary。
二、实验目的
Dictionary遍历dictionary.txt文件,读取数据,并把其中的英文词汇转化为法语或意大利语。
文档格式:每行空格前为英语,空格后为法语或意大利语,中括号中为词性。
三、任务分解
首先,先观察待处理文档,由于windows下与linux中回车符的表示不同(一个为\r\n,一个为\n)。
所以同一个文档在不同系统中是不同的,linux如下图。
Hadoop之MapReduce实验报告
windows如下图:
Hadoop之MapReduce实验报告
所以要在linux中查看待处理文档,这一步很关键。
从文档中可以看出,该文档实际上是一个字典,每一行对应一个词条
即每一行都是一个英文单词对应一个或是多个翻译,通过逗号分隔开。
因此负责提取感兴趣信息的mapper函数就可以写出了:
Hadoop之MapReduce实验报告
在mapreduce中,数据的获取是按行获取的。获取之后转为String格式,再通过逗号来分离,最终将获得的值按照(key,word)的方式打包。
以linux第三行为例,aardvark orycte/rope[Noun]经过处理之后的结果应当为(aardvark,orycte)及(aardvark ,rope[Noun])
reduce部分则是要把这样相同的值整合,并且输出。因此reduce部分的代码为:
package net.pascalalma.hadoop;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class AllTranslationsReducer extends Reducer<Text, Text, Text, Text> {
private Text result = new Text();
@Override
protected void reduce(Text key, Iterable values, Context context)
throws IOException, InterruptedException {
String translations = “”;
for (Text val : values) {
translations += “|” + val.toString();
}
result.set(translations);
context.write(key, result);
}
@Override
protected void reduce(Text key, Iterable values, Context context)
throws IOException, InterruptedException {
String translations = “”;
for (Text val : values) {
translations += “|” + val.toString();
}
result.set(translations);
context.write(key, result);
}

}
其中for(Text val:values)的意思为,map中相同key值的不同values,然后将这些value以|为分割连接起来,传给translations值。
最后将值打包。
接着写一下driver部分,整个程序就可以运行了。
Hadoop之MapReduce实验报告
*四、实验步骤
1.在Ubuntu上安装Eclipse、Hadoop和JDK(虚拟机里已经安装了这些环境);
2.打开Eclipse,创建一个新的Java Project;
3.选择“Configure Build Path”,选择Library标签,Add External JARs;
4.选择Apache/Hadoop 1.0.4文件夹,选择下列jar文件:
commons-collections-3.2.1.jar
commons-confi guration-1.6.jar
commons-httpclient-3.0.1.jar
commons-lang-2.4.jar
commons-logging-1.1.1.jar
commons-logging-api-1.0.4.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
log4j-1.2.15.jar
Hadoop-core-1.0.4.jar
5.创建“com.trendwise.java”包,并在包中创建“LineCount”类(可使用附件文件);
6.将LineCount项目导出为Jar文件;
7.启动Hadoop,复制loaddata1文件到“/home/wcbdd/Desktop/loaddata1”;
8.访问localhost:50070,利用文件选择器选择选择loaddata1;
9.运行MapReduce程序,“bin/hadoop jar /home/wcbdd/linecount.jar com.trendwise.java.linecount /LOAD /home/wcbdd/workspace/BIGmb”;
10.打开浏览器查看LineCount结果;
11.复制结果到本地文件output.txt;

6.查看运行结果。

五、总结
尝试着分析了一下mapper,reducer函数究竟是怎样写成的。
由于对java以及hadoop内的类不够熟悉,虽然搜索了相关资料,但错误难以避免,希望各位看官能指出不足。
我接下来的实验也将采用这种方式,下周的实验要多查官方文档,希望能够写出更加详细的实验报告。