2016-12-28 108 views
0

我有2個節點的hadoop羣集。每個都有16GB RAM和512GB硬盤。如何在羣集中執行高效的火花程序

我已經寫火花程序像下面一個

代碼:

val input = sc.wholeTextFiles("folderpath/*") 

do some operations on input. 
convert it to dataframe. then register temptable. execute insert command to insert the dataframe value to hive table. 

然後我打開主機1(這是我的集羣的名稱節點)端子&我運行火花提交命令等

>spark-submit --class com.sample.parser --master yarn Parser.jar. 

但是它需要超過50分鐘才能處理總共大約1GB的25個文件。而且當我檢查火花UI時,執行程序列表只有我的主機2.主機1是李擔任司機。

所以實際上只有一個節點正在執行程序(主機2)。爲什麼?

有沒有辦法讓我的驅動程序也可以執行程序。這樣它跑得快一點?難道我做錯了什麼?基本上我希望我的驅動程序節點也是執行程序的一部分(兩臺機器都有8個內核)。 在此先感謝。

+0

你嘗試過'--num-executors 10'嗎? –

+0

是的。我做到了。但仍然只有我的主機2正在執行。不是主人1.這是我所嘗試過的。 「spark-submit --class com.sample.parser - 主紗Parser.jar。--num -executeors 16 --executor-memory 1g --executor-cores 16」。但沒有區別 – user7264473

回答

0

​​默認運行在客戶端(本地)模式,以提交火花工作在集羣模式下使用--deploy-mode爲:

spark-submit \ 
--class com.sample.parser \ 
--master yarn \ 
--deploy-mode cluster \ 
Parser.jar 

--deploy-mode:是否給工人節點 上部署的驅動程序(簇)或局部作爲外部客戶端(客戶端)(默認值:客戶端)

也,實驗--num-executors <n> - 具有不同<n> VA提示...並查看它是否與您的應用程序的性能有任何差異。

+0

是的。這是集羣模式,我應該嘗試。有效。謝謝。 – user7264473