赞
踩
MapTask 阶段处理每个数据分块的单词统计分析,思路是将每一行文本拆分成一个个的单词,每遇到一个单词则把其转换成一个 key-value 对,比如单词 Car,就转换成<’Car’,1>
发送给 ReduceTask 去汇总。
ReduceTask 阶段将接收 MapTask 的结果,按照 key 对 value 做汇总计数。
图1
回顾 MapReduce Map 端编码规范:
1. 用户自定义的 Mapper 需要继承父类 Mapper
2. Mapper 的输入数据是 KV 对的形式(KV 的类型可自定义)
3. Mapper 的输出数据是 KV 对的形式(KV 的类型可自定义)
4. Mapper 中的业务逻辑写在 map() 方法 中
5. MapTask 进程对每一个<K,V>
调用一次map()方法
接下来进入 WordCount Map 端程序的编写,eclipse 成功连接到 Hadoop 集群后,选择“File”->“New”->“Project”->“Map/Reduce Project”创建名为 MyMR 的项目名,在此项目下创建名为com.hongyaa.mr的包名,在此包下创建名为 WordCountMapper.java 的类,如下图所示:
图2
首先编写 Map 端编程框架,自定义的 WordCountMapper 需要继承父类 Mapper,输入数据和输出数据都是KV 对的形式。具体框架代码如下:
- public class WordCountMapper extends Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {
-
- }
将框架中的KV对对应的类型修改完成后的代码如下所示:
- public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
-
- }
已知 Mapper 中的业务逻辑写在 map() 方法中,在此 map()方法中我们需要实现的是将读取到的每一行文本拆分成一个个的单词,每遇到一个单词则把其转换成一个 key-value 对,比如单词 Car,就转换成<’Car’,1>发送给 ReduceTask 去汇总。具体代码如下所示:
- @Override
- protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
- //(1)将maptask传给我们的文本内容先转换成String
- String line = value.toString();
- //(2)根据空格将这一行切分成单词
- String[] words = line.split(" ");
- //(3)将单词输出为<单词,1>
- for (String word : words) {
- //将单词作为key,将次数1作为value,以便后续的数据分发,可以根据单词分发,将相同单词分发到同一个reducetask中
- context.write(new Text(word), new IntWritable(1));
- }
- }
WordCountMapper.java 的完整代码如下所示:
- public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
- /**
- * map阶段的业务逻辑需写在自定义的map()方法中
- * maptask会对每一行输入数据调用一次我们自定义的map()方法
- */
- @Override
- protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
- //(1)将maptask传给我们的文本内容先转换成String
- String line = value.toString();
- //(2)根据空格将这一行切分成单词
- String[] words = line.split(" ");
- //(3)将单词输出为<单词,1>
- for (String word : words) {
- // 将单词作为key,将次数1作为value,以便后续的数据分发,可以根据单词分发,将相同单词分发到同一个reducetask中
- context.write(new Text(word), new IntWritable(1));
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。