关于MapReduce的理解?

本文通过WordCount实例详细解析了MapReduce的工作流程,包括输入、拆分、映射、派发、缩减及输出六个阶段,帮助读者理解大数据处理的核心机制。

其实我们可以从word count这个实例来理解MapReduce。

MapReduce大体上分为六个步骤:

input, split, map, shuffle, reduce, output。

细节描述如下:

 输入(input):如给定一个文档,

包含如下四行:

 Hello Java 

Hello C 

Hello Java

 Hello C++ 


拆分(split):

将上述文档中每一行的内容转换为key-value对,

即:

 0 - Hello Java 

1 - Hello C 

2 – Hello Java 

3 - Hello C++ 


3. 映射(map):

将拆分之后的内容转换成新的key-value对,

即: 

(Hello , 1) 

(Java , 1)

 (Hello , 1) 

(C , 1)

 (Hello , 1) 

(Java , 1) 

(Hello , 1) 

(C++ , 1) 


4. 派发(shuffle):

将key相同的扔到一起去,

即:

 (Hello , 1) 

(Hello , 1)

 (Hello , 1)

 (Hello , 1) 

(Java , 1)

 (Java , 1)

 (C , 1) 

(C++ , 1) 


注意:这一步需要移动数据,原来的数据可能在不同的datanode上,这一步过后,相同key的数据会被移动到同一台机器上。

最终,它会返回一个list包含各种k-value对,

即:

 { Hello: 1,1,1,1} 

{Java: 1,1} 

{C: 1}

 {C++: 1} 


5. 缩减(reduce):

把同一个key的结果加在一起。

如:

 (Hello , 4)

 (Java , 2) 

(C , 1) 

(C++,1) 


6. 输出(output): 输出缩减之后的所有结果。

参考资源链接:[Hadoop大数据分布式PPT课件](https://wenku.youkuaiyun.com/doc/2ciyqjxqmq?utm_source=wenku_answer2doc_content) MapReduce模型是Hadoop框架的核心组件之一,用于处理大规模数据集的并行运算。Map阶段负责处理输入的数据块并生成中间键值对,而Reduce阶段则将具有相同键的所有值组合起来进行处理。为了让你更好地理解并实践MapReduce,建议查看《Hadoop大数据分布式PPT课件》。这份课件详细介绍了MapReduce的工作原理及其实现方式。 在实现MapReduce作业时,首先需要定义Map和Reduce函数。例如,我们想要统计一个文本文件中每个单词出现的次数,可以按照以下步骤进行: 1. Map阶段:编写Map函数,读取文本文件中的一行,然后将每个单词映射为一个键值对(单词,1),表示该单词出现一次。 2. Shuffle阶段:Hadoop框架会自动处理Map阶段输出的键值对,将所有相同的键(单词)分组到一起。 3. Reduce阶段:编写Reduce函数,遍历每个分组的键值对,将值(出现次数)累加起来,最终得到每个单词的总计数。 在Java中,MapReduce作业可以通过继承org.apache.hadoop.mapreduce.Job类并设置相应的Map和Reduce类来实现。下面是一个简单的示例代码框架: ```java public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, 参考资源链接:[Hadoop大数据分布式PPT课件](https://wenku.youkuaiyun.com/doc/2ciyqjxqmq?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值