[大数据基本功]数仓中某张表执行时间过慢的优化思路
可以在上游使用hint,通过使用coalesce或者repartition减少map阶段的task数量,从而控制上游产生的文件数,这时下游就不需要再去进行小文件合并了。参考:https://blog.csdn.net/zfxhz/article/details/140385442?3)找到对应sql, 对其中每个可能导致数据倾斜的字段,通过count(1)+group by的方式排查是哪个字段的某
数仓中某张表每日过晚都未执行完毕,排查及其解决方法(随时更新)
首先在该表或其上游找到拖累整个进度的瓶颈表,对于瓶颈表执行过慢的情况,一般是以下原因导致:
1、抢不到资源、执行优先级过低(若执行过慢为偶现问题,则大概率是这种情况)
解决方式:
1) 提高在spark任务中的执行优先级,或者独立分配资源运行
2) 添加spark任务的初始化参数,使其能够抢到资源,例如:
set spark.executor.memory=8G;
set spark.driver.memory=8G;
set spark.yarn.executor.memoryOverhead=4G;
SET spark.executor.cores=5;
SET spark.dynamicAllocation.maxExecutors=20;
SET spark.dynamicAllocation.minExecutors=12;
2、表本身执行过慢
数据倾斜排查
1)在spark ui ->stages中查看执行时间较长的stages id
2)在spark sql的整体dag里,根据stage id查看对应的sql
3)找到对应sql, 对其中每个可能导致数据倾斜的字段,通过count(1)+group by的方式排查是哪个字段的某个键数量过多导致了数据倾斜
4)找到问题字段后,将该字段的key值打散后再执行查询
小文件排查
1)下游小文件合并:
参考:https://blog.csdn.net/zfxhz/article/details/140385442?spm=1001.2014.3001.5501
2)若某张下游表小文件合并stage时间过长
可以在上游使用hint,通过使用coalesce或者repartition减少map阶段的task数量,从而控制上游产生的文件数,这时下游就不需要再去进行小文件合并了。
数据逻辑本身较为复杂
考虑优化sql或者将其中计算复杂的瓶颈部分独立建模

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)