栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spark: Shuffle & 数据倾斜(个人总结)

Spark: Shuffle & 数据倾斜(个人总结)

    声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章
              2. 由于是个人总结, 所以用最精简的话语来写文章
              3. 若有错误不当之处, 请指出

四种Shuffle:

    HashShuffle: 产生的磁盘小文件的个数为 maptask*reducetask 个

    缺点: 临时小文件太多,I/O读取压力 和 磁盘存储压力大

    优化后的HashShuffle: 多个Task共用一个临时文件, 产生的磁盘小文件的个数为 cpu*reducetask 个

    SortShuffle(新出来的): 先排序再Shuffle 然后再Merge多个临时小文件(一个文件内有多个分区)为1个临时文件+1个索引文件

    缺点: 排序太伤性能

    bypassSortShuffle(优化后的SortShuffle): Task数量小于spark.shuffle .sort.bypassMerge Threadshold参数的值(默认为200)时, 不进行排序, 按照分区溢写文件

数据倾斜:

发现热点key的方法: sample取样+rank前几名

分类:

    分组聚合时 可能会有数据倾斜

    解决办法:

      从源头数据上进行预聚合

      预聚合成一个中间表, 后续处理都复用这个中间表

      两阶段聚合:

      第一阶段拼接随机数后缀 然后局部聚合, 第二阶段去掉随机数后缀 然后全局聚合

    Join时 可能会有数据倾斜

    解决办法:

    分类:

      小表 join 大表

      使用MapJoin: 缓存小表然后进行广播, 在各个Task再进行join

      大表 join 大表:

      将A表的含有热点key的数据, 拼接[1~n]内的随机数后缀,

      然后B表扩容n倍, 确保无论在哪个分区中 A表都能看到全部的B表数据 并与之进行join

通用解决方案 但又治标不治本: 提高 shuffle 操作的并行度

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/761147.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号