首页 理论教育 单个MapReduce编程实例详解

单个MapReduce编程实例详解

时间:2023-06-26 理论教育 版权反馈
【摘要】:由上述实现代码可知,WordCount类可以分为三部分,Map,Reduce和main三部分,Map和Reduce都是静态内部类。使用MapReduce之前一定要初始化Configuration,用于读取HDFS和Mapreduce的配置信息;args设置输入文件和输出文件的位置,输出文件的文件夹可以不存在,运行后会在指定目录下自动生成。Reduce类继承于Reducer类,Reducer类是一个泛型类,四个参数分别表示输入键,输入值,输出键,输出值。

单个MapReduce编程实例详解

(1)任务要求。

有一批规模较大的文件,统计这些文件中所有单词出现的次数。

(2)实现思想。

首先,分别统计每个文件中单词出现次数,然后累加不同文件中同一个单词出现次数;

(3)数据说明。

需要统计单词的输入文件存放在HDFS系统“/user/input”目录下,统计结果的输出文件则输出到HDFS中“/user/output/”目录下。(www.xing528.com)

(4)实现代码。

由上述实现代码可知,WordCount类可以分为三部分,Map,Reduce和main三部分,Map和Reduce都是静态内部类。使用MapReduce之前一定要初始化Configuration,用于读取HDFS和Mapreduce的配置信息;args设置输入文件和输出文件的位置,输出文件的文件夹可以不存在,运行后会在指定目录下自动生成。

其中,Map类继承与Mapper类,四个参数表示其输入键类型为Object,输入值为文本,输出键为文本,输出值为整型数。map方法的前两个参数分别为输入的键和值,经过Map操作后,输入文件的单词将被拆分后存储到map中,每个单词字符串的数量均存储为1。因此,在代码中定义了一个整型类型的变量one,值为1,用来作为map的值,具体实现过程为,首先通过下面的代码先将text格式的字段转为java的String类型;其次利用StringTokenizer对字符进行拆分。StringTokenizer st=new StringTokenizer(value.toString());当不指定为界定符时,将默认以空格进行拆分。hasMoreTokens方法用来判断是否还有分隔符。最后使用context的write方法将数据进行记录。

Reduce类继承于Reducer类,Reducer类是一个泛型类,四个参数分别表示输入键,输入值,输出键,输出值。其中输入键和输入值与Map类的输出键,输出值保持一致。当数据传递给reduce时,数据已经经过了洗牌,即键相同的数据进行了合并,所以reduce方法的key为键,values是一个迭代器,存储着该键对应的所有值,然后在方法体中对该键对应的值得数量进行了统计。

下面着重介绍迭代器Iterable,通常利用Iterator模式实现遍历集合,iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而使客户端程序员不需要了解集合的内部结构。以往我们遍历一个集合时,需要知道集合的内部结构。

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

我要反馈