2017-02-13 114 views
0

我有一個使用grpc的Spark 2應用程序,以便客戶端應用程序可以連接到它。Spark 2:檢查節點是主節點還是工作節點

但是,我希望grpc代碼只能在主節點上啓動,而不能在worker上啓動。

在Spark 2中是否有可能檢查代碼當前正在運行的節點是否是主節點?

+0

你說的是*,其中司機跑了*從? –

+0

是的!我想檢查運行的代碼是否作爲驅動程序的一部分運行。 – navige

回答

1

你可以從驅動程序的主機名:

sc.getConf.get(「spark.driver.host」) 
+0

所以檢查:'java.net.InetAddress.getLocalHost()。getHostName()== mainContext.sc.getConf.get(「spark.driver.host」)'應該讓我做檢查我猜 – navige

+1

而不是檢查平等,請參閱http://stackoverflow.com/questions/2406341/how-to-check-if-an-ip-address-is-the-local-host-on-a-multi-homed-system – navige

+0

我不知道如果你以本地模式或紗線集羣運行你的代碼,你的執行者可以在與你的驅動程序相同的位置登陸。 – BiS

1

我不喜歡使用「主機」來做到這一點,那麼需要依靠選配合適的接口,還,同一節點可以同時包含驅動程序和主人。就個人而言,我設置變量環境

spark.executorEnv.RUNNING_ON_EXECUTOR=yes 

,然後在我的代碼(這裏使用Python,但它應該在任何其他語言工作):

import os 
if "RUNNING_ON_EXECUTOR" in os.environ: 
     //Run executor code 
else: 
     //run driver code 
相關問題