2017-06-20 79 views
1

我們假設我有4個NM,並且我已經在yarn-client模式下配置了spark。然後,我將動態分配設置爲true,以根據工作負載自動添加或刪除執行程序。如果我理解正確,每個Spark執行器都作爲Yarn容器運行。Spark的動態資源分配如何在YARN上工作(關於NodeManagers)?

那麼,如果我加入更多NM,執行器的數量會增加嗎?

如果我在Spark應用程序運行時刪除NM,那麼該應用程序會發生什麼?

我可以根據其他指標添加/刪除執行程序嗎?如果答案是肯定的,那麼有一個函數,最好在Python中,這樣做?

回答

1

如果我理解正確,每個Spark執行器都作爲Yarn容器運行。

是的。這就是任何應用程序部署到YARN,Spark包括的情況。 Spark對YARN沒有任何特殊的意義。

那麼,如果我添加更多NM,執行器的數量會增加嗎?

不,YARN NodeManagers和Spark的執行者之間沒有關係。

Dynamic Resource Allocation

星火提供了一種機制,動態地調整你的應用程序佔用根據工作負載的資源。這意味着如果您的應用程序不再使用,並且在有需求時再次請求它們,那麼您的應用程序可能會將資源返回給羣集。

正如您現在可能已經猜到的那樣,您的羣集中有多少個NM並且Spark在決定是否要求新執行程序或刪除某些程序時由工作負載無關。

如果我在Spark應用程序正在運行時刪除NM,則該應用程序會發生什麼情況?

是的,但只有當Spark使用該NM爲執行者。畢竟,NodeManager將資源(CPU和內存)提供給YARN集羣管理器,然後將這些資源交給Spark應用程序等應用程序。如果你把它們放回去,說關閉節點,那麼資源將不再可用,並且Spark執行程序的進程就會消失(因爲沒有資源可以運行的任何其他進程)。

我可以根據其他指標添加/刪除執行程序嗎?

是的,但通常它是Spark工作(沒有雙關語意)做計算和請求新的執行者。

您可以使用SparkContext來管理執行者,方法是使用killExecutors,requestExecutorsrequestTotalExecutors方法。

killExecutor(executorId:字符串):布爾請求,該集羣管理器殺指定的執行者。

requestExecutors(numAdditionalExecutors的:int):布爾請求從集羣管理器執行器的附加數量。

requestTotalExecutors(numExecutors:詮釋,localityAwareTasks:詮釋,hostToLocalTask​​Count:地圖[字符串,INT]):布爾更新我們的調度需求的集羣管理器。

相關問題