头歌大数据Mapreduce基础应用

第一关:WordCount词频统计。
本关任务。
词频统计是最能体现的。MapReduce。
思想的程序,结构简单上手容易。
词频统计的一般功能是:单个或多个文本文件中每个单词出现的次数,并根据每个单词及其出现频率。
键值对的形式输出,如下图所示,基本执行流程如下所示a;
从图中可以知道:
- 输入文本(不止一个),提取文本文档的单词,形成行。
对键值c;有很多具体的形式例如。<行数,字符偏移>
等; - 通过。
Spliting。
将。
细化为单词键值对。
; Map。
分发到每个节点同时将。
归结为list(); - 计算统计前,先用。
Shuffing。
一起形成相同的主键K2。
; Reduce。
阶段直接对。
合计得到。list(
并将结果返回主节点。)。
主节点对预设文本文档进行词频统计,并输出最终结果。
相关知识。
MapReduce。
采用"分而治之"思想,操作大规模数据集,分发给主节点管理下的每个分节点共同完成,然后整合每个节点的中间结果,得到最终结果。MapReduce框架负责处理分布式存储、工作调度、负载平衡、容错平衡、容错处理和网络通信等复杂问题。将处理过程高度抽象为两个函数:map。
和。reduce。
。
map负责将任务分解成多个任务b;reduce负责总结分解后多任务处理的结果。
注:MapReduce。
处理过的数据集必须分解成许多小数据集,而且每一个小数据集都可以完全并行处理。不是关系数据库,而是结构化。
map处理阶段。
对于给定的待处理文本文件,其map阶段的处理如下:
通过Text对象获取文本文档的内容。
处理文件,提取单词。
每个单词都是key,相应的value设置为1,将
对输出。
关键说明:map。
阶段处理,主要是如何逐行分割文本的单词,从而获得单词并将键值对分发到每个节点(此处由。hadoop。
隐性提供用户不必担心hdfs存储过程)。可参考的单词分割提取代码模板如下:
public void map(Object key,Text value,Context context)throws IOException,InterruptedException{ ///分割文本内容对象value StringTokenizer itr=new StringTokenizer(valu e.toString()); while(itr.hasMoreTokens()) { String word=itr.nextToken();/*获得分割好的单词*/ /* 它可以在这个循环中,设置key和value,使用获得好的单词word变量。 */ }}。 */ }}。
reduce处理阶段。
在。Wordcount。
的。reduce。
阶段,主要是统计每个单词的数量,包括:
- 每个单词出现的次数在每个节点并行循环统计。
- 以listt总结每个节点的结果(
)形式输出。 reduce。
函数参考模板:
public void reduce(Object key,Iterable values,Context context)throws IOException, InterruptedException{ int count=0; for(IntWritable itr:vlaues) { count+=itr.get(); /*循环统计*// } /*统计完成后,将结果输出...*/}。
编程要求。
本关的编程任务是完成右代码片段。map。
和。reduce。
函数中的代码,具体要求及说明如下:
- hadoop的系统设置已初始化在主函数main中,包括hadoop操作环境的连接。
- 在main函数中,已设置待处理文件路径(即input༉,结果输出路径(即output)。
- 在main函数中,job对象已经声明c;已经设定了程序运行的工作调度。
- 本关只需在map和reduce函数的指定区域编写代码,请勿更改其他区域。
测试说明。
以下是测试样本:
测试输入样例数据集:文本文档。test1.txt。
和。test2.txt。
文档test1.txt的内容是:tale as old as time。
true as it can be。
beauty and the beast。
文档test2.txt中的内容是:ever just the same。
ever as before。
beauty and the beast。
预期输出。result.txt。
文档内容为:
and 2 as 4 beast 2 beauty 2 before 1 can 1 ever 2 it 1 just 1 old 1 same 1 tale 1 the 3 time 1 true 1 ``
示例代码如下。
import。java。.。io。.。IOException。;import。java。.。util。.。StringTokenizer。;import。org。.。apache。.。hadoop。.。conf。.。Configuration。;import。org。.。apache。.。hadoop。.。fs。.。Path。;import。org。.。apache。.。hadoop。.。io。.。IntWritable。;import。org。.。apache。.。hadoop。.。io。.。Text。;import。org。.。apache。.。hadoop。.。mapreduce。.。Job。;import。org。.。apache。.。hadoop。.。mapreduce。.。Mapper。;import。org。.。apache。.。hadoop。.。mapreduce。.。Reducer。;import。org。.。apache。.。hadoop。.。mapreduce。.。lib。.。input。.。FileInputFormat。;import。org。.。apache。.。hadoop。.。mapreduce。.。lib。.。output。.。FileOutputFormat。;import。org。.。apache。.。hadoop。.。util。.。GenericOptionsParser。;public。class。WordCount。{ 。/* * #xff08原始数据以test1.例如txt༉: * tale as old as time true as it can be beauty and the beast map阶段作为map的输入值,以下数据形式a;偏移量为key <0 tale as old as time> <21 world java hello> <39 you me too> */。/** * 解析(Spliting)然后得到键值对<K2,V2>(只有test1.例如txt༉ * 以下格式:前者是键值,后者的数字是值 * tale 1 * as 1 * old 1 * as 1 * time 1 * true 1 * as 1 * it 1 * can 1 * be 1 * beauty 1 * and 1 * the 1 * beast 1 * 作为map的输出数据,这些键对于这些键值 */。//****请补充map函数****//。//****请补充map函数****//。/
(责编:人民网)
分享让更多人看到
热门排行
- 1源码编译安装 LAMP
- 2Kafka服务器的简单部署以及消息的生产、消费、监控
- 3【RabbitMQ】Spring Boot 结合 RabbitMQ 完成应用间的通信
- 4算法中最优化算法的方法和实现(第10课 全局优化)
- 5RK Android11 WiFi模组 AIC8800 驱动移植调试记录
- 6AYANEO 推出首款复古移动电源 Retro Power Bank:类 SFC 外观,12000mah,双向 45W
- 7AI生成图像检测调研
- 8云计算:FusionCompute 通过 FreeNAS 添加SAN存储
- 9AI生成图像检测调研
- 10OpenAI“草莓”大模型新项目曝光,微美全息(WIMI.US)探航AI风口加快落地应用