【Spark】Spark的Shuffle机制「建议收藏」

【Spark】Spark的Shuffle机制

大家好,又见面了,我是全栈君。

MapReduce中的Shuffle

在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。
Shuffle是MapReduce框架中的一个特定的phase,介于Map phase和Reduce phase之间,当Map的输出结果要被Reduce使用时。输出结果须要按key哈希。而且分发到每个Reducer上去。这个过程就是shuffle。因为shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的执行效率。
下图描写叙述了MapReduce算法的整个流程,当中shuffle phase是介于Map phase和Reduce phase之间:
【Spark】Spark的Shuffle机制「建议收藏」

在Hadoop, 在mapper端每次当memory buffer中的数据快满的时候, 先将memory中的数据, 按partition进行划分, 然后各自存成小文件, 这样当buffer不断的spill的时候, 就会产生大量的小文件。
所以Hadoop后面直到reduce之前做的全部的事情事实上就是不断的merge, 基于文件的多路并归排序,在map端的将同样partition的merge到一起, 在reduce端, 把从mapper端copy来的数据文件进行merge, 以用于终于的reduce
多路归并排序, 达到两个目的。

merge, 把同样key的value都放到一个arraylist里面;sort, 终于的结果是按key排序的。
这个方法扩展性非常好, 面对大数据也没有问题, 当然问题在效率, 毕竟须要多次进行基于文件的多路归并排序,多轮的和磁盘进行数据读写。
【Spark】Spark的Shuffle机制「建议收藏」

Spark的Shuffle机制

Spark中的Shuffle是把一组无规则的数据尽量转换成一组具有一定规则的数据。
Spark计算模型是在分布式的环境下计算的。这就不可能在单进程空间中容纳全部的计算数据来进行计算。这样数据就依照Key进行分区。分配成一块一块的小分区,打散分布在集群的各个进程的内存空间中,并非全部计算算子都满足于依照一种方式分区进行计算。

当须要对数据进行排序存储时。就有了又一次依照一定的规则对数据又一次分区的必要。Shuffle就是包裹在各种须要重分区的算子之下的一个对数据进行又一次组合的过程

在逻辑上还能够这样理解:因为又一次分区须要知道分区规则。而分区规则依照数据的Key通过映射函数(Hash或者Range等)进行划分,由数据确定出Key的过程就是Map过程,同一时候Map过程也能够做数据处理。比如,在Join算法中有一个非常经典的算法叫Map Side Join,就是确定数据该放到哪个分区的逻辑定义阶段。Shuffle将数据进行收集分配到指定Reduce分区,Reduce阶段依据函数对对应的分区做Reduce所需的函数处理。

Spark中Shuffle的流程

【Spark】Spark的Shuffle机制「建议收藏」
* 首先每个Mapper会依据Reducer的数量创建出对应的bucket,bucket的数量是M×R,当中M是Map的个数,R是Reduce的个数。
* 其次Mapper产生的结果会依据设置的partition算法填充到每个bucket中去。

这里的partition算法是能够自己定义的,当然默认的算法是依据key哈希到不同的bucket中去。

* 当Reducer启动时,它会依据自己task的id和所依赖的Mapper的id从远端或是本地的block manager中取得对应的bucket作为Reducer的输入进行处理。

这里的bucket是一个抽象概念,在实现中每个bucket能够对应一个文件。能够对应文件的一部分或是其它等。

转载请注明作者Jason Ding及其出处
GitCafe博客主页(http://jasonding1354.gitcafe.io/)
Github博客主页(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)
Google搜索jasonding1354进入我的博客主页

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115742.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sublime4 激活码2021【2021.8最新】

    (sublime4 激活码2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html83PVI25FMO-eyJsaWNlbnNlSW…

    2022年3月27日
    80
  • 卸载pycharm重新安装_ubuntu卸载pycharm

    卸载pycharm重新安装_ubuntu卸载pycharm1.安装包下载下载地址https://www.jetbrains.com/pycharm/download/#section=linux社区版是免费的,不需要支付额外的费用,但是功能略微筛选,适合于学生群体,而专业版需要支付一定的费用,功能比较多,适用于企业,但整体的安装过程相同。2.安装在安装包过程启动终端命令,解压缩下载后的安装包修改自己的安装包版本号即可$tar-zxvfpycharm-professional-2021.3.1.tar.gz将解压缩后的目录移动到/

    2022年8月29日
    2
  • XDOJ1145–组合数学四之Carnival Phantasm

    XDOJ1145–组合数学四之Carnival Phantasm描述:为解救可怜的武内崇老师,saber、远坂、爱尔奎特、希耶尔等人组成了第六科急救队!最终,由琥珀开发出了禁药,分身光线(这药是内服还是外用的==?),将爱尔奎特批量化生产,来对月世界进行全面的地毯式搜索。现已知,第六科共有m个复制人(每个复制人完全一样),月世界有n个城市,每个城市会被一个复制人搜索一遍。问:共有多少种分配方法。(根据时空管理局劳务法更定,每个复制人又要分得工作。)…

    2022年5月7日
    36
  • 提供一个免费的CSDN下载账号

    提供一个免费的CSDN下载账号

    2021年11月15日
    108
  • pycharm上传代码到git_gitee收费吗

    pycharm上传代码到git_gitee收费吗前提:1、在码云https://gitee.com/ 中已经注册了账号,并且已经创建了仓库2、已经安装了git客户端: 3、在settings中设置gitee账户,登入:  、 3、在pycharm中安装gitee插件:file–setttings–plugins–搜索gitee,安装:  4、安装成功后检查:  5、提价本地项目代码到gitee:选中要提交的项目后VCS-…

    2022年8月26日
    5
  • 最大似然估计,最大后验估计,贝叶斯估计联系与区别

    最大似然估计,最大后验估计,贝叶斯估计联系与区别1.什么是参数在机器学习中,我们经常使用一个模型来描述生成观察数据的过程。例如,我们可以使用一个随机森林模型来分类客户是否会取消订阅服务(称为流失建模),或者我们可以用线性模型根据公司的广告支出来预测公司的收入(这是一个线性回归的例子)。每个模型都包含自己的一组参数,这些参数最终定义了模型本身。我们可以把线性模型写成y=mx+c的形式。在广告预测收入的例子中,x可以表示广告支…

    2022年10月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号