深入解析hadoop中的小黑盒shuffle

本文深入探讨了Hadoop中的shuffle过程,从MapShuffle的并行执行、内存缓存、数据溢写到磁盘,到ReduceShuffle的相同key合并与排序,详细阐述了shuffle如何将数据转换为key-values数组形式,并强调了其在数据处理中的关键作用。
摘要由CSDN通过智能技术生成

简介

小黑盒shuffle是用来将数据转换成key-values数组形式,具体思想流程加源码透析如图:

这里写图片描述

图形解析

首先我们知道①InputFormat接口子类

jdk1.8源码: protected void map(KEYIN key, VALUEIN value, Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context context) throws IOException, InterruptedException {
        context.write(key, value);
    }

MapShuffle⑩

图中可以看到多个Mapper并行执行map()方法,多个map并行工作而且相互不影响,每个map工作结束后就会将输出的key-value对先存储在内存的缓存区中,这个③缓存区是环状类似于Hash中的链表<只不过链表首尾呼应而这个环状是上下呼应那种>一样对数据进行放置,但是缓存区是有默认内存的,这时候程序会多开辟一条线程SpillThread对缓存区进行实时监控,

//源码MapTask类
        protected class SpillThread extends Thread {
            protected SpillThread() {
            }

当数据存储过大就会将内存缓存区中的数据溢写到spill到本地磁盘中去

ReduceShuffle⑪

然后开始执行ReduceShuffle,直到这里MapShuffle阶段完成后会出现临近的和相同的key⑤排序着,而且每个key会对应多种多样的value,而ReduceShuffle阶段的目的就是为了让相同的key的所有value合并到一起然后进行上下排序的过程。图中可以看出这是一个MapShuffle的执行原理,当4个Mapper并行执行map()方法的时候,会出现每个map()在执行的过程时⑥,就可能会有相同的key,这个key可能对应相同的value也可能对应不同的value,ReduceShuffle执行会将相同的key就行归并,归并的方式可能是2个或者3个等不定<可以在配置中调节>不同的进行数据合并也就是说key中会对应2个或者多个不同的value⑦,然后在次排序,用同样的方法进行排序,⑧最后的到的就是key-values的数组形式,每个过程排序+合并,最终的结构就是key—values的数组形式并且每个key上下排序着;
排序后生成的大文件放在map程序本机的本地磁盘,⑨并且等待reduce()来拷贝数据;
!!当执行到此处,可以进行以下两个可设置的操作:

-1- Combiner(map端的reduce),文件合并的时候,可以执行reduce端操作(将相同key的value合并在一起),这种操作不是每个reduce程序都可以进行,只有不影响最终结果的情况下,才能够进行Combiner操作。 

-2- 压缩:在此处可以将合并后的大文件进行压缩,压缩后可以减少磁盘的占用量,当reduce copy时也可以减少网络IO

这样一个完整的小黑盒shuffle处理就结束了.曹天博客地址

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值