hadoop倒排索引实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大数据技术概论实验报告
作
业
三
姓名:郭利强
专业:工程管理专业
学号: 2015E8009064028
目录
1.实验要求 (3)
2.环境说明 (4)
2.1系统硬件 (4)
2.2系统软件 (4)
2.3集群配置 (4)
3.实验设计 (4)
3.1第一部分设计 (4)
3.2第二部分设计 (6)
4.程序代码 (11)
4.1第一部分代码 (11)
4.2第二部分代码 (17)
5.实验输入和结果 (21)
实验输入输出结果见压缩包中对应目录 (21)
1.实验要求
第一部分:采用辅助排序的设计方法,对于输入的N个IP网络流量文件,计算得到文件中的各个源IP地址连接的不同目的IP地址个数,即对各个源IP地址连接的目的IP地址去重并计数
举例如下:
第二部分:输入N个文件,生成带详细信息的倒排索引
举例如下,有4个输入文件:
– d1.txt: cat dog cat fox
– d2.txt: cat bear cat cat fox
– d3.txt: fox wolf dog
– d4.txt: wolf hen rabbit cat sheep
要求建立如下格式的倒排索引:
– cat —>3: 4: {(d1.txt,2,4),(d2.txt,3,5),(d4.txt,1,5)}–单词—>出现该单词的文件个数:总文件个数: {(出现该单词的文件名,单词在该文件中的出现次数,该文件的总单词数),……}
2.环境说明
2.1系统硬件
处理器:Intel Core i3-2350M CPU@2.3GHz×4 内存:2GB
磁盘:60GB
2.2系统软件
操作系统:Ubuntu 14.04 LTS
操作系统类型:32位
Java版本:1.7.0_85
Eclipse版本:3.8
Hadoop插件:hadoop-eclipse-plugin-2.6.0.jar Hadoop:2.6.1
2.3集群配置
集群配置为伪分布模式,节点数量一个
3.实验设计
3.1第一部分设计
利用两个Map/Reduce过程,在第一个MR中,读取记录并去除重复记录,第二个MR按照辅助排序设计方法,根据源地址进行分组,统计目的地址数量。
第一个MR设计:
自定义StringPair{源地址,目的地址}类型,实现WritableComparable,在map过程读取文件,输出
在第二个MR设计:
1.在Map过程读取第一个MR的输出,对value值进行拆分,并以拆分得到的源地址和目的地址初始化StringPair对象作为输出键,输出值为1。
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
String[] records = value.toString().split("\t");
String sourceip = records[0];
String desip=records[1];
context.write(new StringPair(sourceip,desip),one);
}
2.定义GroupComparator类,继承WritableComparator类,并重载compare方法,对Map过程输出按照StringPair.first排序,完成按照源地址分组。
public static class GroupComparator extends WritableComparator {
protected GroupComparator() {
super(StringPair.class, true);
}
@Override
public int compare(WritableComparable w1,WritableComparable w2) {
StringPair ip1=(StringPair)w1;
StringPair ip2=(StringPair)w2;
return ip1.getFirst().compareTo(ip2.getFirst());
}
}
3.在Reduce过程统计分组中的所有值,得到源地址连接不同目的地址数量。
public void reduce( StringPair key, Iterable
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val:values) {
sum += val.get();
}
statistic.set(sum);
context.write(key.getFirst(), statistic);
}
}
3.2第二部分设计
利用两个Map/Reduce过程,第一个MR统计各个文件中的所有单词的出现次数,以及各个文件单词总数,第二个MR根据统计结果处理加工得到单词倒排索引。
第一个MR设计: