MapReduce

MapReduce

话接上篇,既然HDFS将文件分分散存放在各个节点了,那么也就可以在每个存储节点来单独计算了,毕竟人多力量大。没错,MapReduce 就是这么干的,调用Hadoop 提供的API,将map任务和reduce任务写好,打包上传到Hadoop框架就可以由集权来调度资源执行计算任务了,至于如何调度下篇再聊,这里主要聊一下map-reduce。

为什么时map-reduce呢,先来看一下归并排序

public void mergeSort (int[] arr, int begin, int end){


}

这里体现的就是分治思想,map-reduce也使用的这种思想,将一个大任务分成多个小任务,它将其定义成了两个阶段,map阶段和reduce阶段,“分”这个阶段干的事请在map时做,“合”这个阶段干的事请在reduce时做,以大数据中的helloworld为例,
首先获取数据,在map时将数据分为<word, 1> 这种pair的形式,reduce中将同一个word的pair累计,就得到了每个word的词频。编写的map和reduce类需要用到一个driver来驱动。其中数据怎么分片,map和reduce之间数据怎么传输框架都帮我们搞定了(毕竟框架,人家说了怎么干照着干就行了)。虽然传输不需要我们操心,但是可以看到map和reduce中的形参都不是java的普通数据类型,而是hadoop自定义的,这是为什么呢?因为如前所示的<word,1>这种形式的数据是需要在不同任务间传输的,不同任务可能运行在不同的节点,将map任务的结果传输到reduce的网络传输就需要序列化和反序列化,hadoop自己实现的数据类型序列化/反序列化更高效。那么问题来了,自定义的bean在hadoop中使用时也要实现writable序列化接口。

前面讲了MapReduce的基本思想,那它内部究竟怎么工作的呢?

1、map端

map端的InputFormat用getSplits

2、reduce端

以wordcount为例,map 仅仅将

3、shuffle

参考文献

MapReduce 之helloworld代码。
MapReduce 之使用自定义be’an对象时实现writable序列化接口。
129M会被切成两个小文件吗?
shffule之自定义分区器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值