由于生产上spark集群需要诸多优化,先想先从数据倾斜开始下手,从平台层面进行改进。
Spark Adaptive Execution可以帮助完成优化,现进行验证:
一.集群跟shuffle partition有关的参数现状:
目前生产上已经有了调整shuffle parititon的参数:
1.spark.sql.adaptive.skewedJoin.enabled=true
2.spark.sql.adaptive.enabled=true
3.spark.sql.adaptive.maxpostshufflepartitions=2000
开启了自适应情况,但是还没有完全启用
二.选择任务情况
选择一个超时任务,进行调参验证
三.验证效果
这里发现另一个问题:
一个任务,单独跑的时候只要12s完成,但是生产调度跑的时候,需要8分钟。
可能的原因是,虽然分配的资源是相同的,但是当时CPU是满负荷运载,每个线程拿到的时间片将会大大减少。
验证思路:
统计集群在各个时间段,运行的任务情况。