2016-11-22 44 views
3

我有一臺8臺機器,256個內核,每臺機器180Gb RAM的火花集羣。我已經啓動了32個執行程序,每個32個核心和40Gb ram。爲什麼我只能看到200個階段的任務?

我想優化一個複雜的應用程序,我注意到很多階段都有200個任務。這在我看來似乎是次優的。我已經嘗試將參數spark.default.parallelism設置爲1024,但它似乎沒有效果。

我運行spark 2.0.1,在獨立模式下,我的驅動程序託管在pycharm調試會話中運行的工作站上。我在設置spark.default.parallelism:

  • 火花defaults.conf工作站上呼叫
  • 火花defaults.conf上的集羣火花/ conf目錄
  • 的基礎上繼續SparkSession我 司機

這是呼叫

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

我已經重新啓動該exe自從做這些改變以來。

如果我的理解正確,在一個階段只有200個任務意味着我的集羣沒有被充分利用?

當我觀看使用htop的機器時,我可以看到我沒有獲得完整的CPU使用率。也許在同一臺機器上,但不是全部。

我是否需要在我的數據框上調用.rdd.repartition(1024)?在任何地方似乎都是一種負擔。

+0

嘗試設置在此配置:集(「spark.sql.shuffle.partitions」,「8」) 其中8(您想使[數減少任務星火] –

+0

可能的複製分區的數量http://stackoverflow.com/questions/33297689/number-reduce-tasks-spark) – sgvd

+0

但是,你爲什麼只想用8?據我所知,它應該等於或高於同時運行的任務數量。 –

回答

1

嘗試設置在此配置: set("spark.sql.shuffle.partitions", "8")

其中8是要進行分區的數量。

相關問題