一下内容和资源整理来源于DT大数据梦工厂
本期内容:
1、Hash Shuffle 彻底解密
2、shuffle Pluggable
3、sorted shuffle
4、shuffle 性能优化
一: 到底什么是shuffle
在hadoop shuffle 产生于Map和reduce 之间。
shuffle中文翻译为洗牌,需要shuffle 的关键性原因:由于具有某种具有某种共同特征的数据需要最终汇集到一个计算节点上计算
二、 shuffle 可能面临问题?运行Task 的时候才会产生Shuffle
1、数据量非常大(从不同节点传输过来,网络传输很消耗)
2、 数据如何分类即如何配partition:不同partition 、hash 、 sort、 钨丝计划
3、负载均衡(数据倾斜是核心优化问题之一)
4、网络传输效率:需要在压缩和解压缩之间做出权衡;序列化和反序列化也是需要考虑的问题(我们希望处理的数据都在Task中)
说明:具体的Task进行计算的时候,
说明: 具体的Task 运行计算的 时候尽一切可能使得数据具备Process_Locality
如何确保数据内存本地性,退而求其次是增加数据分片,减少每个Task处理的数据量(批次运行将更多次),除非数据非常复杂,有必要为了中间计算持久化,否则计算一般都放在内存中。(读磁盘IO是高风险的动作)
为什么shuffle 的容错需要持久化,需要等待父的Stage算完才能进行下一个Stage的计算,如果数据有一个地方出错,所有的地方需要重新计算。所以遇到shuffle 一定要持久化。最简单的shuffle 是hash 级别
三 Hash shuffle
1、key不能是Array
2、Hash Shuffle 不需要排序 :按照key hash core 不需要排序,此时从理论上讲就接节省了Hadoop Shuffle需要排队时候的时间浪费,因为实际情况下有大量不需要排序的shuffle类型:
思考:不需要排序Hash shuffle 是否一定就比需要排序sorted shuffle 快:
不一定: 1、数据规模比较小,不需要排序的hash shuffle 一定比需要排序的sorted shuffle 快。
2、但是如果数据量大,此时sorted shuffle 一般都比 hash shuffle 快很多。原因是数据规模比较大, hash shuffle 会处理很多中小规模文件,数据,磁盘,网络等都会成为瓶颈。
3、每个shuffleMapTask会根据key的哈希值计算出当前的key需要写入的Partition,然后把决定后的结果写入单独的文件,此时会导致每个Task产生R(指下一个Stage的并行度)个文件,如果当前的Stage中有M个shuffleMapTask,则会M*R 个文件
注意shuffle操作觉大多数情况下都要通过网络,如果Mapper和Reducer在同一台机器上,此时只需要读取本地磁盘即可。
根据图推测:
(并行度只有2,但是下一阶段任务有6个,上一个前置stage 需要分为几种类型,一定是6种类型。Stage分为几个跟并行度没有关系,跟下一阶段任务有关系。
默认Hash的方式,刚刚前置在本地生成6个小文件。
对磁盘要求非常高,读很多文件需要很多句柄)
4、Hash Shuffle的2大死穴:第一Shuffle前会产生海量的小文件于磁盘之上,此时会产生大量耗低效的IO操作;第二:内存不够用,由于内存中需要保存海量的文件操作句柄和临时缓存信息,如果数据处理规模比较庞大的话,内存不可承受,出现OOM 等异常信息
一个Write Handler 默认大小50k
为了改上述问题(同时打开过多文件导致Writer Handler 内存使用过大以及产生过度文件导致大量的随机读写带来的效率低下的磁盘io操作),spark后来推出了Consalidate机制,来把小文件合并(根据TaskId合并) 同一个。此时文件产生的个数为core*R(reduce)。对于shuffleMapTask的数量明显多于同时可用的cores的数量的情况下,shuffle产生的文件会大幅度减少。会极大的降低OOM的可能。
为此Spark退出Shuffle Pluggable开发框架,方便系统升级的时候定制shuffle功能模块,也方便第三方系统改造人员根据实际的业务场景来开发具体最佳的shuffle模块。核心(ShuffleManage 接口)具体默认实现有HashShuffleManager, SortShuffleManager等。
不配置默认是sort排序的方式。 spark.shuffle.manager 配置获得。sort:如果解决小文件过多。
hash:数据量比较少,不需要排序比较合适。
结束的时候进程归并排序,有一个index 文件记录不同文件信息。
集群的规模和计算的规模就不受限制。
DT大数据梦工厂联系方式:
新浪微博:www.weibo.com/ilovepains/
微信公众号:DT_Spark
博客:http://.blog.sina.com.cn/ilovepains
TEL:18610086859
Email:[email protected]