2019-02-25
阅读量:
1956
spark 如何解决task过多的情况?
task过多,原因是分区的问题。我们应该从分区入手,是输入的小文件太多,还是本来就会有大数据量。在分区过多时,限定分区个数看看性能是否提高,也可以在filter等操作后对分区进行一定缩减。大量使用shuffle操作使task增加(这个应该不是本问题原因,但是我们应该考虑这也是让task增加的原因),这样会完成多个stage串行会降低效率。
当我们真的无法避免这么多task时候,我们应该用最佳的参数进行调优,如下:
1) executor_cores*num_executors 不宜太小或太大!一般不超过总队列 cores 的 25%,比如队列总 cores 400,最大不要超过100,最小不建议低于 40,除非日志量很小。
2) executor_cores 不宜为1!否则 work 进程中线程数过少,一般 2~4 为宜。
3) executor_memory 一般 6~10g 为宜,最大不超过 20G,否则会导致 GC 代价过高,或资源浪费严重。
4) spark_parallelism 一般为 executor_cores*num_executors 的 1~4 倍,系统默认值 64,不设置的话会导致 task 很多的时候被分批串行执行,或大量 cores 空闲,资源浪费严重。
5) driver-memory 早前有同学设置 20G,其实 driver 不做任何计算和存储,只是下发任务与yarn资源管理器和task交互,除非你是 spark-shell,否则一般 1-2g 就够了。






评论(0)


暂无数据
推荐帖子
0条评论
1条评论
0条评论