理论教育 MapReduce Java API实例:从入门到精通

MapReduce Java API实例:从入门到精通

时间:2023-06-14 理论教育 版权反馈
【摘要】:MapReduce 项目的创建和HDFS 创建类似,这里就不做过多赘述。利用Map 阶段的Sort 功能,将要排序的数值作为map 函数的key 输出,并在reduce 函数设置一个计数器。在map 阶段将年作为输出的key,温度作为输出的value;在reduce 阶段求出相同key 的value 最大值。只需要将要选择的字段放入map 阶段的输出key,并在reduce 中将输出value 设置为NullWritable。在map 阶段将整条记录作为输出的key,在reduce 阶段对相同key 的value 计算,凡是大于等于2 的为符合条件的,将其保存。

MapReduce Java API实例:从入门到精通

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 输出结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈