Spark 2:检查节点是主节点还是工作节点

时间:2017-02-13 08:54:58

标签: apache-spark

我有一个使用grpc的Spark 2应用程序,以便客户端应用程序可以连接到它。

但是,我希望grpc代码只能在主节点上启动,而不是在worker上启动。

Spark 2是否有可能检查代码当前运行的节点是否为主节点?

3 个答案:

答案 0 :(得分:1)

您可以从以下位置获取驱动程序主机名:

sc.getConf.get(“spark.driver.host”)

答案 1 :(得分:1)

我不喜欢使用“hosts”的方式,你依赖于匹配正确的接口,同样的节点可以同时包含驱动程序和主服务器。就个人而言,我设置了一个环境变量

spark.executorEnv.RUNNING_ON_EXECUTOR=yes

然后在我的代码中(在这里使用Python,但它应该适用于任何其他语言):

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

答案 2 :(得分:0)

当 TaskContext.get() 通常为 None 时,我们可以判断一个节点是驱动程序,除非 TaskContext 在驱动程序中显式创建用于测试目的。