阿里云Spark Shuffle的优化
转自:大数据技术与架构
本次分享者:辰石,来自阿里巴巴计算平台事业部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的优化相关推荐
- 阿里云全球实时传输网络GRTN—QOE优化实践
直播已深入每家每户,以淘宝的直播为例,在粉丝与主播的连麦互动中如何实现无感合屏或切屏?LiveVideoStackCon 2022音视频技术大会上海站邀请到了阿里云GRTN核心网技术负责人肖凯,为我们 ...
- Forrester 最新报告:阿里云稳居领导者地位,引领云原生开发浪潮
来源 | 阿里巴巴云原生公众号 日前,国际权威研究机构 Forrester 发布了<The Forrester Wave: Public Cloud Development And Infras ...
- docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2020年03月1 ...
- 阿里云中间件首席架构师李小平:云原生实践助力企业高效创新
简介:通过云原生技术,真正为企业带来更多的业务价值,助力企业整体的业务创新. 作者:李小平 前天我参加了信通院的云原生产业大会,在会场上非常感慨,参加会议的企业非常多,并且来自于各行各业.我想起201 ...
- 从阿里云七代云服务器,谈云计算四大趋势
简介:云计算走了十年有余,期间阿里云共发布了七代云服务器.每一代阿里云ECS产品的性能提升,都指引着云计算的发展趋势.看看第七代ECS产品的发布,又透露了哪些未来趋势. 从不知为何物到成为基础设施,云 ...
- 阿里云如何实现海量短视频的极速分发?答案在这里!
摘要:短视频行业目前比较火热,但是如何快速的实现海量短视频的极速分发,对于短视频业务提供方来讲是一个比较棘手的问题.阿里云技术专家将带领大家从视频的上传.采集.存储和CDN分发等方面为我们介绍阿里云的 ...
- 阿里云 x 蒙牛 | 打通数据孤岛,基于MaxCompute实现产销协同的智慧运营
每一个公司转型的背后 都有着不为人知的秘密 今天,让我们一起探秘 内蒙古蒙牛乳业(集团)股份有限公司是中国发展速度最快的乳品企业之一,2017年实现收入601.56亿元,位列全球乳业第10位,与201 ...
- 阿里云推出“磐久”云原生服务器系列 能效和交付效率大幅提升
10月19日上午,在2021杭州云栖大会上,阿里云正式推出面向云原生时代的"磐久"自研服务器系列,首款搭载自研芯片倚天710的磐久高性能计算系列也同时亮相,该款服务器将在今年部署, ...
- 为什么当初很多人不看好的阿里云做起来了?
11月2日,阿里巴巴发布最新一季度财报,阿里云上半年收入突破100亿人民币,达到去年同期水平. 过去几年,阿里云收入规模连续13个季度保持接近100%增长,取得中国第一.全球第三的行业地位.估值也从2 ...
最新文章
- 百度开源联邦学习框架 PaddleFL:简化大规模分布式集群部署
- .NET中的中文简繁体转换
- python一些常用方法_python常用的一些技巧
- 回归模型的score得分为负_Sklearn模型中预测值的R2_score为负数的问题探讨
- MySQL引擎之MyISAM,InnoDB,Btree与B+tree
- java开发环境及数据类型实验_实验项目1 Java开发环境与语言基础
- java中使用grpc和protobuf
- RocketMQ(七)——消息的消费
- 5G 时代,AIoT 该如何布局?
- 详解站长之家之站长工具四大新功能
- git代码管理可视化工具 :Sourcetree(mac环境)
- oracle oem打不开,oracle10g的oem打不开解决办法
- flac文件如何转换成mp3
- Sportisimo EDI项目需求及包装标准
- 刀塔霸业怎么在电脑上玩 刀塔霸业电脑版玩法教程
- BUUCTF Misc wp大合集(1)
- 【MOOC】JS脚本|便于复制粘贴中国大学MOOC网站的测试题和选项
- [转载] COM 套间
- 3dsMax---期末设计[CC‘s 游乐园’]
- 01 ArcGIS空间分析--水文分析--利用水文分析方法提取山谷山脊线