大表关联大表倾斜(100亿 join 50亿)

昨晚有同学提到面试中问大表关联怎么调优(100亿 join 50亿,无聚合函数) 前置判断:需要判断两张表关联键是否是1对多、1对1,如果a、b表是多对多还是会倾斜 分析误区:加盐/打散,题目中只是提到将两张表进行关联,因此这里无论是加随机数还是、取模都是无效的(因为关联不到一起) 分析思路: (1)map端减少输入:通过on中过滤及谓词下推可限制关联表数据,例如过滤时间、过滤枚举、限制分区 (2)大key拆解:可以写sql by维度找到热点key分布,可以按照维度(例如一级类目、场景,但要保障相同)进行拆表,分批插入目标表(目标表也可以根据大维度去做二级分区,或者先做一个临时表也行) (3)预聚合:例如关联表是单事务日志(状态变化便产生一条数据),可进行预聚合,多条取最新数据,聚合后再进行关联 (4)分区:重分区加task,distribute by,保障分区数据均匀,增加多任务去分担压力, 只能作为缓解,治标不治本 (5)参数:常用还是 SET spark.sql.adaptive.skewJoin.enabled=true;(join负载均衡) SET spark.sql.autoBroadcastJoinThreshold=10485760;(广播) SET spark.sql.shuffle.partitions=2000;(shuffle并行)sparkjava

#数据分析##数据人offer决赛圈怎么选##数据人的面试交流地##你今年的平均薪资是多少?##牛客创作赏金赛#
全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务