我在两台机器上设置了一个小型Spark环境。一个运行一个主人和一个工人,另一个只运行一个工人。我可以使用Spark Shell来使用这个集群,如:
spark-shell --master spark://mymaster.example.internal:7077
我可以在那里运行正确分配到节点的计算,所以一切运行正常。
但是,我在使用spark-jobserver时遇到了麻烦。
首先尝试启动Docker容器(环境变量SPARK_MASTER
指向正确的主URL)。当工作开始时,推动工作人员抱怨它无法连接回172.18.x.y:nnnn
。这很清楚,因为这是作业服务器运行的Docker容器的内部IP地址。
因此,我再次使用--network host
运行了jobserver容器,因此它将自己附加到主机网络。但是,启动作业导致Connection再次被拒绝,这次说它无法连接到172.30.10.10:nnnn
。 172.30.10.10
是我想要运行作业服务器的主机的IP地址,它可以从工作节点和主节点访问(Spark实例也在Docker容器中运行,但它们也连接到主机网络)。
深入挖掘,我尝试启动一个只有JVM和Spark的Docker容器,也用--network host
运行它并从内部启动了Spark作业。这很有用。
我可能会遗失什么?
答案 0 :(得分:0)
事实证明我错过了启动shuffle服务。我将自定义jobserver容器配置为使用动态分配,这需要启动外部shuffle服务。