转自:大数据技术与架构

本次分享者:辰石,来自阿里巴巴计算平台事业部EMR团队技术专家,目前从事大数据存储以及Spark相关方面的工作。

  • Spark Shuffle介绍

  • Smart Shuffle设计

  • 性能分析

Spark Shuffle流程

  • Spark 0.8及以前 Hash Based Shuffle

  • Spark 0.8.1 为Hash Based Shuffle引入File Consolidation机制

  • Spark 0.9 引入ExternalAppendOnlyMap

  • Spark 1.1 引入Sort Based Shuffle,但默认仍为Hash Based Shuffle

  • Spark 1.2 默认的Shuffle方式改为Sort Based Shuffle

  • Spark 1.4 引入Tungsten-Sort Based Shuffle

  • Spark 1.6 Tungsten-sort并入Sort Based Shuffle

  • Spark 2.0 Hash Based Shuffle退出历史舞台

总结一下, 就是最开始的时候使用的是 Hash Based Shuffle, 这时候每一个Mapper会根据Reducer的数量创建出相应的bucket,bucket的数量是M x R ,其中M是Map的个数,R是Reduce的个数。这样会产生大量的小文件,对文件系统压力很大,而且也不利于IO吞吐量。后面忍不了了就做了优化,把在同一core上运行的多个Mapper 输出的合并到同一个文件,这样文件数目就变成了 cores R 个了。

Spark Shuffle实现

Sort-based shuffle介绍

这个方式的选择是在org.apache.spark.SparkEnv完成的:

// Let the user specify short names forshuffle managers
val shortShuffleMgrNames = Map(
"hash" ->"org.apache.spark.shuffle.hash.HashShuffleManager",
"sort" ->"org.apache.spark.shuffle.sort.SortShuffleManager")
val shuffleMgrName =conf.get("spark.shuffle.manager", "sort") //获得Shuffle Manager的type,sort为默认
val shuffleMgrClass =shortShuffleMgrNames.getOrElse(shuffleMgrName.toLowerCase, shuffleMgrName)
val shuffleManager =instantiateClass[ShuffleManager](shuffleMgrClass)

Hashbased shuffle的每个mapper都需要为每个reducer写一个文件,供reducer读取,即需要产生M x R个数量的文件,如果mapper和reducer的数量比较大,产生的文件数会非常多。Hash based shuffle设计的目标之一就是避免不需要的排序(Hadoop Map Reduce被人诟病的地方,很多不需要sort的地方的sort导致了不必要的开销)。但是它在处理超大规模数据集的时候,产生了大量的DiskIO和内存的消耗,这无疑很影响性能。

Hash based shuffle也在不断的优化中,正如前面讲到的Spark 0.8.1引入的file consolidation在一定程度上解决了这个问题。为了更好的解决这个问题,Spark 1.1 引入了Sort based shuffle。首先,每个Shuffle Map Task不会为每个Reducer生成一个单独的文件;相反,它会将所有的结果写到一个文件里,同时会生成一个index文件,Reducer可以通过这个index文件取得它需要处理的数据。

避免产生大量的文件的直接收益就是节省了内存的使用和顺序Disk IO带来的低延时。节省内存的使用可以减少GC的风险和频率。而减少文件的数量可以避免同时写多个文件对系统带来的压力。

目前writer的实现分为三种, 分为 BypassMergeSortShuffleWriter, SortShuffleWriter 和 UnsafeShuffleWriter。

SortShuffleManager只有BlockStoreShuffleReader这一种ShuffleReader。

Spark-shuffle存在的问题

同步操作

Shuffle数据只有等map task任务结束后可能会触发多路归并生成最终数据。

大量的磁盘IO

Shuffle的数据在Merge阶段存在大量的磁盘读写IO,在sort-merge阶段对磁盘IO带宽要求较高。

计算与网络的串行

Task任务计算和网络IO的串行操作。

Smart Shuffle

shuffle数据的pipeline

shuffle数据在map端累积到一定数量发送到reduce端。

避免不必要的网络IO

根据partition数量的位置,可以调度该reduce任务到相应的节点。

计算和网络IO的异步化

shuffle数据的生成和shuffle数据的发送可以并行执行。

避免sort-merge减少磁盘IO

shuffle数据是按照partition进行分区,shuffle数据无需sort-merge

Smart Shuffle使用

  • 配置spark.shuffle.manager : org.apache.spark.shuffle.hash.HashShuffleManager

  • 配置spark.shuffle.smart.spill.memorySizeForceSpillThreshold:控制shuffle数据占用内存的大小,默认为128M

  • 配置spark.shuffle.smart.transfer.blockSize:控制shuffle在网络传输数据块的大小

性能分析

硬件及软件资源:

TPC-DS性能:

Smart shuffle TPC-DS性能提升28%:

  • Smart shuffle没有打来单个query性能的下降

  • 单个query最大能够带来最大2倍的性能提升

提取Q2和Q49查询性能分析:

  • Q2在两种shuffle性能保持一致

  • Q49在Smart shuffle下性能有很大提升

单个查询对比:

左侧为sorted shuffle,右边为smart shuffle。 Q2查询相对简单,shuffle数据也比较少,smart shuffle性能保持不变。

Q2 CPU对比: 左侧为sorted shuffle,右侧是smart shuffle

磁盘对比:

左侧为sorted shuffle,右侧是smart shuffle

阿里云Spark Shuffle的优化相关推荐

  1. 阿里云全球实时传输网络GRTN—QOE优化实践

    直播已深入每家每户,以淘宝的直播为例,在粉丝与主播的连麦互动中如何实现无感合屏或切屏?LiveVideoStackCon 2022音视频技术大会上海站邀请到了阿里云GRTN核心网技术负责人肖凯,为我们 ...

  2. Forrester 最新报告:阿里云稳居领导者地位,引领云原生开发浪潮

    来源 | 阿里巴巴云原生公众号 日前,国际权威研究机构 Forrester 发布了<The Forrester Wave: Public Cloud Development And Infras ...

  3. docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS

    本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2020年03月1 ...

  4. 阿里云中间件首席架构师李小平:云原生实践助力企业高效创新

    简介:通过云原生技术,真正为企业带来更多的业务价值,助力企业整体的业务创新. 作者:李小平 前天我参加了信通院的云原生产业大会,在会场上非常感慨,参加会议的企业非常多,并且来自于各行各业.我想起201 ...

  5. 从阿里云七代云服务器,谈云计算四大趋势

    简介:云计算走了十年有余,期间阿里云共发布了七代云服务器.每一代阿里云ECS产品的性能提升,都指引着云计算的发展趋势.看看第七代ECS产品的发布,又透露了哪些未来趋势. 从不知为何物到成为基础设施,云 ...

  6. 阿里云如何实现海量短视频的极速分发?答案在这里!

    摘要:短视频行业目前比较火热,但是如何快速的实现海量短视频的极速分发,对于短视频业务提供方来讲是一个比较棘手的问题.阿里云技术专家将带领大家从视频的上传.采集.存储和CDN分发等方面为我们介绍阿里云的 ...

  7. 阿里云 x 蒙牛 | 打通数据孤岛,基于MaxCompute实现产销协同的智慧运营

    每一个公司转型的背后 都有着不为人知的秘密 今天,让我们一起探秘 内蒙古蒙牛乳业(集团)股份有限公司是中国发展速度最快的乳品企业之一,2017年实现收入601.56亿元,位列全球乳业第10位,与201 ...

  8. 阿里云推出“磐久”云原生服务器系列 能效和交付效率大幅提升

    10月19日上午,在2021杭州云栖大会上,阿里云正式推出面向云原生时代的"磐久"自研服务器系列,首款搭载自研芯片倚天710的磐久高性能计算系列也同时亮相,该款服务器将在今年部署, ...

  9. 为什么当初很多人不看好的阿里云做起来了?

    11月2日,阿里巴巴发布最新一季度财报,阿里云上半年收入突破100亿人民币,达到去年同期水平. 过去几年,阿里云收入规模连续13个季度保持接近100%增长,取得中国第一.全球第三的行业地位.估值也从2 ...

最新文章

  1. 百度开源联邦学习框架 PaddleFL:简化大规模分布式集群部署
  2. .NET中的中文简繁体转换
  3. python一些常用方法_python常用的一些技巧
  4. 回归模型的score得分为负_Sklearn模型中预测值的R2_score为负数的问题探讨
  5. MySQL引擎之MyISAM,InnoDB,Btree与B+tree
  6. java开发环境及数据类型实验_实验项目1 Java开发环境与语言基础
  7. java中使用grpc和protobuf
  8. RocketMQ(七)——消息的消费
  9. 5G 时代,AIoT 该如何布局?
  10. 详解站长之家之站长工具四大新功能
  11. git代码管理可视化工具 :Sourcetree(mac环境)
  12. oracle oem打不开,oracle10g的oem打不开解决办法
  13. flac文件如何转换成mp3
  14. Sportisimo EDI项目需求及包装标准
  15. 刀塔霸业怎么在电脑上玩 刀塔霸业电脑版玩法教程
  16. BUUCTF Misc wp大合集(1)
  17. 【MOOC】JS脚本|便于复制粘贴中国大学MOOC网站的测试题和选项
  18. [转载] COM 套间
  19. 3dsMax---期末设计[CC‘s 游乐园’]
  20. 01 ArcGIS空间分析--水文分析--利用水文分析方法提取山谷山脊线

热门文章

  1. 2020.5.27 线性规划测试(Lingo实现)
  2. CodeForces - 618D Hamiltonian Spanning Tree(思维+贪心)
  3. 机器学习-Kmeans聚类
  4. bash: gitbook: command not found
  5. CSP-2019总结
  6. 漫游Kafka设计篇之性能优化
  7. Windows Socket五种I/O模型详细介绍(精)
  8. Gh0st源代码详细剖析
  9. 1_5 PrototypeMode 原型(克隆)模式
  10. Java agent初探