2017-02-13 118 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 
相关问题