头歌大数据Mapreduce基础应用
人民网>>社会·法治

头歌大数据Mapreduce基础应用

2025-06-24 11:56:52 | 来源:人民网
小字号

第一关:WordCount词频统计。

本关任务。

词频统计是最能体现的。MapReduce。思想的程序,结构简单󿀌上手容易。

词频统计的一般功能是:单个或多个文本文件中每个单词出现的次数,并根据每个单词及其出现频率。键值对的形式输出,如下图所示,基本执行流程如下所示a;
在这里插入图片描述
从图中可以知道:

  1. 输入文本(不止一个),提取文本文档的单词,形成行。对࿰键值c;有很多具体的形式󿀌例如。<行数,字符偏移>等;
  2. 通过。Spliting。将。细化为单词键值对。
  3. Map。分发到每个节点󿀌同时将。归结为list();
  4. 计算统计前,先用。Shuffing。一起形成相同的主键K2。
  5. Reduce。阶段直接对。 合计得到。list()。并将结果返回主节点。
    主节点对预设文本文档进行词频统计,并输出最终结果。

相关知识。

MapReduce。采用"分而治之"思想,操作大规模数据集,分发给主节点管理下的每个分节点共同完成,然后整合每个节点的中间结果,得到最终结果。MapReduce框架负责处理分布式存储、工作调度、负载平衡、容错平衡、容错处理和网络通信等复杂问题。将处理过程高度抽象为两个函数:map。和。reduce。

map负责将任务分解成多个任务b;reduce负责总结分解后多任务处理的结果。

注:MapReduce。处理过的数据集必须分解成许多小数据集,而且每一个小数据集都可以完全并行处理。不是关系数据库,而是结构化。

map处理阶段。

对于给定的待处理文本文件,其map阶段的处理如下:

  1. 通过Text对象󿀌获取文本文档的内容。

  2. 处理文件,提取单词。

  3. 每个单词都是key,相应的value设置为1,将对输出。
    关键说明:

  4. map。阶段处理,主要是如何逐行分割文本的单词,从而获得单词󿀌并将键值对分发到每个节点(此处由。hadoop。隐性提供󿀌用户不必担心hdfs存储过程)。

  5. 可参考的单词分割提取代码模板如下:

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。阶段,主要是统计每个单词的数量,包括:

  1. 每个单词出现的次数在每个节点并行循环统计。
  2. 以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。函数中的代码,具体要求及说明如下:

  1. hadoop的系统设置已初始化在主函数main中,包括hadoop操作环境的连接。
  2. 在main函数中,已设置待处理文件路径(即input༉,结果输出路径(即output)。
  3. 在main函数中,job对象࿰已经声明c;已经设定了程序运行的工作调度。
  4. 本关只需在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函数****//。/

(责编:人民网)

分享让更多人看到