2017-09-14 65 views
1

如下圖所示:我們如何優化Spark作業不同階段的CPU /核心/執行程序?

enter image description here

我的星火的工作有三個階段:

0. groupBy 
1. repartition 
2. collect 

階段0和1是相當輕巧,但第2階段是非常CPU密集型。

是否可以針對一個Spark作業的不同階段進行不同配置?

我想過把這個Spark作業分成兩個子作品,但是這打破了使用Spark的目的,它將所有中間結果存儲在內存中。這也將大大延長我們的工作時間。

有什麼想法嗎?

回答

1

不,不可能在運行時更改火花配置。見documentationSparkConf

注意,一旦SparkConf對象傳遞給火花,被克隆,不能再被用戶修改。 Spark不支持在運行時修改配置。


不過,我猜你不需要collect之前做repartition,如果沒有其他操作在兩者之間。 repartition將在不需要的節點上移動數據,如果你想要做的是collect它們到驅動程序節點上。

0

我與Shaido的觀點一致。但是想要在這裏包含Spark 2.x帶有一些被稱爲動態資源分配的東西。

https://spark.apache.org/docs/latest/job-scheduling.html#dynamic-resource-allocation

在高層次上,應星火放棄執行者,當他們不再使用,在需要的時候獲得執行者。

這意味着應用程序可以動態地改變使用spark.executor.instances的值,而不是

spark.executor.instances與spark.dynamicAllocation.enabled不相容。如果指定了spark.dynamicAllocation.enabled和spark.executor.instances,則會關閉動態分配,並使用指定數量的spark.executor.instances。

相關問題