我正在努力在多宿主网络情况下设置Spark集群,但遇到了一些问题。我将从物理配置开始。
我在一个机架中共有12个节点,这些节点具有一个使用ipoib的机架间100G infiniband网络和一个1G管理网络。
当我从群集的主节点上运行作业时,Spark效果很好,但现在我正尝试从连接到管理网络的工作站上进行作业,这是我遇到麻烦的地方。
所有spark节点的主机文件都指向infiniband网络,因为我希望它们通过该网络进行通信。我必须将主节点的SPARK_MASTER_HOST设置为0.0.0.0,以便甚至能够从我的工作站连接到主节点。
现在,我可以创建一个SparkSession并执行操作,但是它始终挂起,当我查看工作程序的日志时,我看到他们收到“没有通往主机的路由”错误。看来,即使节点上的默认路由设置为管理子网,它仍尝试使用infiniband网络连接回客户端。 (我应该指出,我可以从所有客户端ping我的工作站,因此我知道网络路由很好。而且所有防火墙目前都处于关闭状态)
请注意,由于此设置,spark master Web界面无法很好地工作,因为指向工作人员的所有链接都指向infiniband IP地址,因此它始终会失败,但是如果您只是更改IP手动在地址栏中找到正确的子网。修复起来也很好,但是没什么大不了的。
我尝试浏览了spark文档,但实际上并没有发现任何有用的东西,我尝试了一些网络设置,但是运气不高。我很难相信Spark不支持拥有专用网络,但事实就是如此。
我感谢你们能给我任何帮助或想法。
答案 0 :(得分:1)
我过去一直都在面对这些问题(在InfiniBand中也是如此),并且找不到合适的解决方案,而只是一些解决方法。 问题是Spark不允许客户端<-> master和master <-> worker在不同的网络上连接。
解决方法#1:使用YARN群集模式 您的应用程序将在YARN群集(我认为与您的Spark群集相同)中运行,从而可以访问InfiniBand网络。在这种情况下,您将必须确保可以通过管理网络将作业提交给YARN。然后,YARN将启动将绑定到InfiniBand网络的Spark进程。
解决方法2:代理 另一个选择(我没有尝试过,但是应该可以使用)是在Spark Master节点上设置代理守护程序,该守护程序将中继您的管理<-> IB网络。