2016-11-10 34 views
2

我正在運行一個包含兩個EC2實例(m4.xlarge)的小型Spark羣集。強制驅動程序在使用「--deploy-mode cluster」運行的spark獨立羣集中的特定從服務器上運行

到目前爲止,我一直在一個節點上運行spark master,在另一個節點上運行單個spark slave(4核,16g內存),然後在主服務器上以客戶端部署模式部署我的Spark(流)應用程序。的設置概要是:

--executor存儲器16克

--executor-鐵芯4

--driver-8G內存

--driver-芯2

- -deploy-mode客戶端

這會導致我的單個從屬服務器上運行4個內核和16Gb內存的單個執行程序。驅動程序在主節點上運行「外部」羣集(即不由主節點分配其資源)。

理想情況下,我想使用羣集部署模式,以便我可以利用監督選項。我已經在主節點上啓動了第二個從屬設備,爲其提供2個內核和8g內存(較小的分配資源,以便爲主守護程序留出空間)。

當我在羣集部署模式下運行我的spark工作(使用與上面相同的設置但使用--deploy-mode羣集)。大約50%的時間,我得到所需的部署,即驅動程序運行在主節點上運行的從站(具有2個核心的正確資源),這使得原始從節點可以自由分配4個執行程序核心& 16Gb。然而,主機在非主從節點上運行驅動程序的另外50%時間,這意味着我在該節點上獲得一個帶有2個內核的8Gb內存的驅動程序,然後不會有足夠資源啓動執行程序的節點(這需要4個內核& 16Gb)。

有沒有辦法強制spark master爲我的驅動程序使用特定的worker/slave?由於Spark知道有兩個從節點,一個有2個內核,另一個有4個內核,而我的驅動程序需要2個內核,而我的執行程序需要4個內核,所以理想情況下可以找到正確的最佳位置,但這不適用似乎是這樣。

任何意見/建議感激地收到!

謝謝!

+0

運氣好嗎?我正在處理類似的問題,並想知道是否有可能。 – PablodeAcero

+0

我也面臨同樣的問題。 – desaiankitb

+0

找到任何解決方案...? –

回答

1

我可以看到這是一個老問題,但讓我回答它,有人可能會覺得它有用。

--driver-java-options="-Dspark.driver.host=<HOST>"選項添加到​​腳本,當提交應用程序時,Spark應該將驅動程序部署到指定的主機。

相關問題