我有一个使用grpc的Spark 2应用程序,以便客户端应用程序可以连接到它。
但是,我希望grpc代码只能在主节点上启动,而不是在worker上启动。
Spark 2是否有可能检查代码当前运行的节点是否为主节点?
答案 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 在驱动程序中显式创建用于测试目的。