我有一台火花机群,每台机器有8台机器,256个核心,180Gb ram。我已经启动了32个执行器,每个执行器有32个内核和40Gb内存。
我正在尝试优化复杂的应用程序,我注意到很多阶段都有200个任务。在我的情况下,这似乎是次优的。我已经尝试将参数spark.default.parallelism设置为1024,但它似乎没有任何效果。
我运行spark 2.0.1,在独立模式下,我的驱动程序托管在pycharm调试会话中运行的工作站上。我在下面设置了spark.default.parallelism:
这就是那个电话
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)?在任何地方看起来都是一种负担。
答案 0 :(得分:0)
尝试在此配置中设置:
set("spark.sql.shuffle.partitions", "8")
其中8是您要制作的分区数。
答案 1 :(得分:0)
或SparkSession,
.config(“spark.sql.shuffle.partitions”,“2”)