为什么我只能分阶段看到200个任务?

时间:2016-11-22 16:12:17

标签: apache-spark pyspark apache-spark-sql

我有一台火花机群,每台机器有8台机器,256个核心,180Gb ram。我已经启动了32个执行器,每个执行器有32个内核和40Gb内存。

我正在尝试优化复杂的应用程序,我注意到很多阶段都有200个任务。在我的情况下,这似乎是次优的。我已经尝试将参数spark.default.parallelism设置为1024,但它似乎没有任何效果。

我运行spark 2.0.1,在独立模式下,我的驱动程序托管在pycharm调试会话中运行的工作站上。我在下面设置了spark.default.parallelism:

  • 工作站上的spark-defaults.conf
  • spark-conf目录上的spark-defaults.conf
  • 在我的调用中构建SparkSession 驱动器

这就是那个电话

spark = SparkSession \
    .builder \
    .master("spark://stcpgrnlp06p.options-it.com:7087") \
    .appName(__SPARK_APP_NAME__) \
    .config("spark.default.parallelism",numOfCores) \
    .getOrCreate()

自从进行这些更改后,我重新启动了执行程序。

如果我理解正确,在一个阶段只有200个任务意味着我的群集没有被充分利用?

当我使用htop观看机器时,我可以看到我没有获得完整的CPU使用率。也许一次在一台机器上,但不是在所有机器上。

我是否需要在数据帧上调用.rdd.repartition(1024)?在任何地方看起来都是一种负担。

2 个答案:

答案 0 :(得分:0)

尝试在此配置中设置:  set("spark.sql.shuffle.partitions", "8")

其中8是您要制作的分区数。

答案 1 :(得分:0)

或SparkSession,
.config(“spark.sql.shuffle.partitions”,“2”)