数据倾斜在分布式计算中是一个很常见的问题,Spark提供了一种比较便捷的方法来处理一些简单的数据倾斜场景。
Spark中定位数据倾斜
1、找到耗时长的stage并确定为shuffle stage。
2、给所有的task按照shuffle records排序,找到最多数据的task。
3、比较其他的task确定是否发生了倾斜。
4、根据业务逻辑,Spark执行计划,找到倾斜的key。
单表
skew hint
必须至少包含一个表,所有和这个表有关的join都会自动使用倾斜join的优化策略。
-- orders表倾斜
SELECT /*+ SKEW('orders') */ * FROM orders, customers WHERE c_custId = o_custId
-- 临时表倾斜
SELECT /*+ SKEW('C1') */