多宿主 Spark 集群

Multihomed Spark Cluster

我正在努力在多宿主网络情况下设置 Spark 集群,但 运行 遇到了一些问题。我将从物理配置开始。

我在一个机架中有 12 个节点,它们具有使用 ipoib 的机架间 100G infiniband 网络和 1G 管理网络。

当我从集群上的主节点 运行 作业时,Spark 工作得很好,但现在我正尝试从我的工作站执行作业,该工作站连接到我 运行 所在的管理网络陷入困境。

所有 spark 节点的主机文件都指向 infiniband 网络,因为我希望它们通过该网络进行通信。我必须将主节点的 SPARK_MASTER_HOST 设置为 0.0.0.0,以便甚至能够从我的工作站连接到主节点。

现在我可以创建一个 SparkSession 并执行操作,但它总是挂起,当我查看工作人员的日志时,我发现他们遇到了 "No route to host" 错误。似乎即使节点上的默认路由设置为管理子网,它也会尝试使用 infiniband 网络连接回客户端。 (我应该指出,我可以从所有客户端 ping 我的工作站,所以我知道网络路由没问题。而且所有的防火墙目前都已关闭)

作为旁注,由于这种设置,spark master web 界面不能很好地工作,因为所有指向 worker 的链接都指向 infiniband IP 地址,所以它总是失败,但如果你只是改变将地址栏中的 IP 手动设置为正确的子网。这也很好修复,但这并不是什么大问题。

我尝试查看 spark 文档,但没有真正找到任何有用的东西,我尝试使用一些网络设置,但运气不佳。我很难相信 spark 不支持拥有私有网络,但也许是这样。

感谢你们给我的任何帮助或想法。

我曾经一直面临这些问题(在 InfiniBand 的上下文中也是如此)并且没有找到合适的解决方案,而是找到了一些解决方法。 问题是 Spark 不允许 client<->master 和 master<->worker 在不同的网络上连接。

解决方法 #1:使用 YARN 集群模式 您的应用程序将 运行 在 YARN 集群中(我假设它与您的 Spark 集群相同),因此可以访问 InfiniBand 网络。在这种情况下,您必须确保可以通过管理网络将作业提交给 YARN。 YARN 然后将启动将绑定到 InfiniBand 网络的 Spark 进程。

解决方法 #2:代理 另一种选择(我没有尝试过,但应该可行)是在 Spark Master 节点上设置一个代理守护程序,它将中继您的管理<->IB 网络。