MapReduce

一MapReduce的执行流程

1、
mapreduce是一种分布式的离线计算框架,是一种编程模型
分为MapTask和ReduceTask两部分
2、作用
用于大规模数据集(大于1t)的并运行算,将自已的程序运行在分布式系统上
3、概念
MapReduce:Map(映射)和Reduce(归纳)
相同的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算

4、计算过程
split:切片
让更多的节点参与到计算
与block的关系是将block再一次进行逻辑上的划分 默认情况下
一个block就是一个split,但是如果block过大 我们通过设置split的大小 如果block过小, 上传之前将文件合并完毕,如果小文件已经上传完毕,将split大一点,可以将多个block合并到一起
这样就可以减少任务数量 提高计算的性能
ps:能等分尽量等分,一个block就是一个切片

5、MapTask
一个split对应一个maptask
取决与当前集群空闲的节点数或者当前block文件大小 如果根据split和块的对应关系,拉取数据到maptask节点的内存,然后进行拆分操作

6、Partitioner
通过对key进行hash计算,可以获取key对应的hash值
在mr启动之前我们已经设置好了reduce的数量
用hash对reduce数量进行取余,我们就可以得到key所对应的reduce落点

7、KVBuffer:环形数据缓冲区
接受maptask的数据写入 效率远远高于直接写入到硬盘
因为一个节点的计算能力不可能完全分配给一个JOB,所以每个KVBuffer的默认大小为100M 当我们写入数据的时候, 如果达到总容量的80%,会产生数据的溢写spell 将这80%的数据生成一个数据文件

8、fetch
reduce从map拉取数据,因为每个数据文件都是按照分组key进行归并排序 我们从所有的datenode节点拉取数据,只读取partition相对应的数据即可 等我们从各个节点拉取完数据之后,就会产生一推小文件 ,而且这堆小文件 也是有序的 然后在通过merge 按照归并算法 将从各个Datenode节点获取的小文件 合并成一个大文件 在按照key进行排序,将来可以一次算出key对应的结果

9、Reduce
相同的key必须是同一个reduce 但一个reduce可以处理多种的key 将合并的大文件进行归并预算,得到最终的结果生成数据文件(每一个reduce生成数据文件最终会被上传到DFS上用户自定义的目录中,方便客户查询)

10、shuffle
shuffle是maper和reduce中间的一个步骤
从maptask的数据传输到reducetask数据传输, 这个过程都可以算是shuffle阶段(洗牌)这种洗牌的效率要高很多

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值