大多数任务都完成了,还有那么一两个任务怎么都跑不完或者跑的很慢,分为数据倾斜和task倾斜。
错误提示
1. 数据倾斜
image.png2. Task倾斜
差距不大的几个task,有的运行速度特别慢。
解决
1. 数据倾斜
一般由于大量无效数据引起的,比如null或空串,也可能是某些异常数据(如爬虫等)
比如:统计用户登录情况时,出现某用户登录过千万次的情况,在计算前需要将无效数据过滤掉。
注:数据处理有一个原则,多使用filter,这样你真正需要分析的数据量就越少,处理速度就越快。
sqlContext.sql("...where col is not null and col != ''")
具体可参考:
解决spark中遇到的数据倾斜问题
2. 任务倾斜
- Task倾斜原因比较多,网络io,cpu,mem都有可能造成这个节点上的任务执行缓慢,可以去看该节点的性能监控来分析原因。
- 或者可以开启spark推测机制,如果某一台机器的几个task特别慢,推测机制会将任务分配到其他机器执行,最后Spark会选取最快的作为最终结果。
spark.speculation=true
spark.speculation.interval=100 - 检测周期,单位毫秒;
spark.speculation.quantile=0.75 - 完成task的百分比时启动推测
spark.speculation.multiplier=1.5 - 比其他的慢多少倍时启动推测。
网友评论