2

我正在努力在多宿主网络情况下设置 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 不支持拥有专用网络,但也许就是这样。

我很感激你们能给我的任何帮助或想法。

4

1 回答 1

1

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

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

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

于 2018-09-17T23:24:19.727 回答