MapReduce 项目的创建和HDFS 创建类似,这里就不做过多赘述。
一、统计单词出现频率
实现对指定目录或文件中的单词出现次数统计,默认是以单词大小排序。
运行成功会有如图4-11 所示文件存在,_SUCCESS 表示运行成功,part-r-00000 存放的是运行结果,由于默认设置为一个分区,因此文件后置是00000,如果设置多个话的,后缀依次是00001,00002 等。
可以看到part-r-00000 的文件内容如图4-12 所示:
图4-11 WordCount 运行结果
图4-12 part-r-00000 输出内容
为了看到MapReduce 执行情况,可以将Hadoop 中的etc/hadoop/log4j.properties文件拷贝到src 目录下即可,此时控制台会打印相应输出信息,如图4-13 所示:
图4-13 日志输出
导出jar 包部署到集群运行和HDFS 方法一样。
二、统计出现的单词
与统计出现单词频率相比,只是将最终结果的出现次数去掉,因此只需将WordCount 代码reduce 函数中的输出value 的值设置为NullWritable 即可,同时将Job的OutputValue 类型设置为Null。
最终的输出结果如图4-14 所示:
图4-14 WordDelete 输出结果
三、统计平均成绩
统计学生各科平均成绩,每科成绩为一个文件。在Map 阶段和WordCount 一样,只是在Reduce 阶段求出总和之后,再除以科目数,并将输出value 的数据类型设置为FloatWritable 即可。
最终的输出结果如图4-15 所示:
图4-15 ScoreAverage 输出结果
四、排序
输入数据格式为每行有一数值,通过MapReduce 实现数据的排序功能。利用Map 阶段的Sort 功能,将要排序的数值作为map 函数的key 输出,并在reduce 函数设置一个计数器。
最终的输出结果如图4-16 所示:
图4-16 Sort 输出结果(www.daowen.com)
五、求年最高温度
输入数据为每条每行,每条数据包含年月日温度。在map 阶段将年作为输出的key,温度作为输出的value;在reduce 阶段求出相同key 的value 最大值。
最终的输出结果如图4-17 所示:
图4-17 Temperature 输出结果
扩展:如果还要显示出最高温度的年月日,则需要将map 阶段的输出value 设置为整条记录,在reduce 阶段首先分割求出温度再进行比较。
六、关系运算—投影运算
实现类似关系代数集合的投影运算,每条数据占一行,字段之间有”\t”分隔。只需要将要选择的字段放入map 阶段的输出key,并在reduce 中将输出value 设置为NullWritable。
最终的输出结果如图4-18 所示:
图4-18 Select 输出结果
七、关系运算—并运算
实现类似关系代数集合的并运算,每条数据占一行,字段之间有”\t”分隔。在map 阶段将整条记录作为输出的key,在reduce 阶段直接输出即可。
最终的输出结果如图4-19 所示:
图4-19 Union 输出结果
八、关系运算—交运算
实现类似关系代数集合的并运算,每条数据占一行,字段之间有”\t”分隔。在map 阶段将整条记录作为输出的key,在reduce 阶段对相同key 的value 计算,凡是大于等于2 的为符合条件的,将其保存。
最终的输出结果如图4-20 所示:
图4-20 Intersect 输出结果
九、关系运算—差运算
实现类似关系代数集合的并运算,每条数据占一行,字段之间有”\t”分隔。在map 阶段将整条记录作为输出的key,将文件名作为输出的value;在reduce 阶段根据文件名判断,如果为被减的集合,则将结果输出。
最终的输出结果如图4-21 所示:
图4-21 Minus 输出结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。