美文网首页
spark task与stage数量过多调优

spark task与stage数量过多调优

作者: 机器不能学习 | 来源:发表于2018-11-20 11:01 被阅读0次
spark task与stage数量过多调优

昨天群里的一个朋友出现了任务执行过慢。

通过运行过程来看,我们发现task比较多,更值得注意的是这些task都在一个stage之中。

首先要分析这个问题我们应该要清楚task和stage的关系。

spark task与stage数量过多调优

通过这个图我们可以看出job-stage-task的对应关系。首先job的划分是遇到action操作时,被发现后经过sparkcontext的runjob方法来到DAGscheduler,这个类中它会通过依赖关系划分出stage,一个stage是一个taskset,里面的每个task对应着rdd的一个分区。task可以理解为并行的分片。

理解了一个分区对应一个task后,可以分析得出这个问题是分区过多造成的问题。

那么我们再来看看分区数是怎么设定的。

如果在spark-default.conf中没有显示设置的话。会按照不同模式给不同的默认分区数。(spark.default.parallelism)

对于local[N]模式,因为开辟了N个线程,所以有N个core,也就默认分区为N。如果单用local那么只会开起一个分区。

如果是伪分布模式,local-cluster[x,y,z] 那么默认分区是x*y,x代表的是运行的executor数量,y是每个executor有多少个core。

如果是yarn或者是standalone模式。是用的函数max(x*y,2)前者的含义和伪分布一样,后者表示如果x*y<2,分区就取2。

在程序读取创建RDD的时候,一般会用textFile,这个函数可以读取本地或者是hdfs的文件。分区数为

rdd的分区数 = max(本地file的分片数, sc.defaultMinPartitions)
rdd的分区数 = max(hdfs文件的block数目, sc.defaultMinPartitions)

但是对于用 sc.parallelize创建的数据,是用的默认分区,也可以在第二个参数中进行显示的设置。

对于问题本身: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 就够了。

相关文章

  • spark task与stage数量过多调优

    昨天群里的一个朋友出现了任务执行过慢。 通过运行过程来看,我们发现task比较多,更值得注意的是这些task都在一...

  • Spark性能调优之合理设置并行度

    Spark性能调优之合理设置并行度1.Spark的并行度指的是什么?spark作业中,各个stage的task的数...

  • Spark学习笔记(6)性能调优

    1.调节并行度 并行度是指各个stage中task的数量。1)官方推荐,task数量设置成spark applic...

  • Spark[四]——Spark并行度

    Spark并行度指在Spark作业中,各个Stage中task的数量,也就代表了Spark作业在各个阶段的并行度。...

  • Spark(十二) Spark性能调优之调节并行度

    一、背景 Spark并行度指的是什么? 并行度:其实就是指的是,Spark作业中,各个stage的task数量,也...

  • Task数量过多

    背景 当spark最终输出文件stage,task数量非常多时,会在driver端单线程执行大量的rename操作...

  • Spark 并行度

    大数据学习交流微信群 Spark 并行度是指一个stage下并行执行的task数量,由于一个task线程只能执行一...

  • Spark作业性能优化

    Spark作业性能调优总结前段时间在集群上运行Spark作业,但是发现作业运行到某个stage之后就卡住了,之后也...

  • Spark任务提交流程

    RDD -> Stage/Job -> Task 1. SparkContext (spark任务的起点) Spa...

  • parquet flile split 造成的困惑

    困惑 1、spark sql 读取parquet 文件,stage生成任务4个task,只有一个task处理数据,...

网友评论

      本文标题:spark task与stage数量过多调优

      本文链接:https://www.haomeiwen.com/subject/ghutqqtx.html