我有一個使用grpc的Spark 2應用程序,以便客戶端應用程序可以連接到它。Spark 2:檢查節點是主節點還是工作節點
但是,我希望grpc代碼只能在主節點上啓動,而不能在worker上啓動。
在Spark 2中是否有可能檢查代碼當前正在運行的節點是否是主節點?
我有一個使用grpc的Spark 2應用程序,以便客戶端應用程序可以連接到它。Spark 2:檢查節點是主節點還是工作節點
但是,我希望grpc代碼只能在主節點上啓動,而不能在worker上啓動。
在Spark 2中是否有可能檢查代碼當前正在運行的節點是否是主節點?
你可以從驅動程序的主機名:
sc.getConf.get(「spark.driver.host」)
所以檢查:'java.net.InetAddress.getLocalHost()。getHostName()== mainContext.sc.getConf.get(「spark.driver.host」)'應該讓我做檢查我猜 – navige
而不是檢查平等,請參閱http://stackoverflow.com/questions/2406341/how-to-check-if-an-ip-address-is-the-local-host-on-a-multi-homed-system – navige
我不知道如果你以本地模式或紗線集羣運行你的代碼,你的執行者可以在與你的驅動程序相同的位置登陸。 – BiS
我不喜歡使用「主機」來做到這一點,那麼需要依靠選配合適的接口,還,同一節點可以同時包含驅動程序和主人。就個人而言,我設置變量環境
spark.executorEnv.RUNNING_ON_EXECUTOR=yes
,然後在我的代碼(這裏使用Python,但它應該在任何其他語言工作):
import os
if "RUNNING_ON_EXECUTOR" in os.environ:
//Run executor code
else:
//run driver code
你說的是*,其中司機跑了*從? –
是的!我想檢查運行的代碼是否作爲驅動程序的一部分運行。 – navige