spark调优-并行度调优

一个spark任务为一个application

一个job的划分为一个action操作触发

一个job可以被分为多个stage,在一个lineage中,发生shuffle操作时会拆分一个stage,shuffle操作一般发生在以下的几个算子中,distinct、groupbykey、reduceByKey、aggregateByKey、join、cogroup、reparation等中。这其中也是最容易发生数据倾斜的地方。

1、并行度:在spark中各个stage的task数量,也就代表了spark作业在各个阶段(stage)的 并行度。合理的利用集群资源并减少每个task要处理的数据量,最终提升作业的性能和运行速度

2、如何优化

  • task的数量,至少设置成与spark application的总cpu Core数量相同
  • 推荐做法:将task数量设成spark application 总CPU core数量的2~3倍,比如200个CPU Core,task数量基本要设置为400~600个,主要是为了避免task在并行执行的时候,执行完时间不同,导致CPU出现闲置的状态,当一个task执行完以后,立刻有新的task任务填补上来,同时spark运行的效率和速度得到提升。
  • 设置方法:sparkConf conf = new SparkConf().set("spark.default.parallelism","500").


你可能感兴趣的:(spark)