【问题标题】:Mesos Spark Slave tried to connect to Master Private IP instead of public IPMesos Spark Slave 尝试连接到 Master Private IP 而不是 public IP
【发布时间】:2017-10-17 09:57:54
【问题描述】:

我安装的系统如下:

--mesos master 私网 IP 10.x.x.2 , Public 35.x.x.6

--mesos slave私有IP 192.x.x.10,Public 111.x.x.2

现在master成功地把任务分配给slave了,但是任务失败了。错误信息如下:

线程“main”中的异常 17/10/11 22:38:01 ERROR RpcOutboxMessage: 连接成功前询问超时

原因:org.apache.spark.rpc.RpcTimeoutException:无法接收 120 秒内回复。此超时由 spark.rpc.askTimeout

当我查看环境时,spark.driver.host 指向主服务器的私有 IP 地址 10.x.x.2 而不是公共 IP 地址 35.x.x.6。我查看了 Wireshark 捕获,确实,主私有 IP 地址的 TCP 包失败。

现在,如果我将主服务器的 spark.driver.bindAddress 设置为其本地 IP 地址,将主服务器的 spark.driver.host 设置为其公共 IP 地址,我会收到以下消息。

错误TaskSchedulerImpl:丢失执行程序1 myhostname.singnet.com.sg:无法创建执行程序,因为 无法分配请求的地址:

据我了解,spark.driver.bindAddress 为 master 和 slave 设置了它,因此 slave 得到上述错误。 现在我真的很想知道如何正确设置 spark 以通过公共 IP 处理这个集群?

【问题讨论】:

    标签: apache-spark networking mesos


    【解决方案1】:

    我建议您进行全私有设置或全公开设置。不在中间。

    通常,您希望所有内容都是私有的,如果您需要将任何数据暴露给外部,您只需将数据端点暴露在公共 IP 上。例如,运行所有 Spark 作业并将数据存储在 S3 中。然后,您在存储桶上启用 S3 公共访问。使用私有 IP 通常更安全。

    关于mesos master上的--advertise-ip参数。那是为了让mesos奴隶找到mesos master。 spark的问题不支持公共,私人组合,因此您必须做一个或另一个。您可以在连接到公共 IP 的 mesos 机器上运行 spark 工作负载,但这意味着您必须为这些机器提供可访问的 zookeeper 等。

    【讨论】:

    • 感谢您的回答。就我的网络知识而言,我没有看到可以进行所有公共设置的场景。每台暴露于公共 IP 地址的机器都为其内部网络分配了一个私有地址。公共 IP 不是机器本身,而是在路由器上(如果我错了,请纠正我)。 Mesos 通过包含 --advertise_IP 参数解决了这个问题,因此机器可以通过连接到这个地址(这是公共的)来找到彼此。我不确定它是如何在 Spark 上实现的。
    • @TheCyber​​liem 当然。检查我对答案的补充
    • 感谢您的回复。但是,如果您仔细阅读我的问题描述,您会发现没有私有 IP 就不能拥有全部公共设置(正如我所提到的,公共 IP 永远不在机器上,而是在路由器上。所以机器有私有 IP并且路由器将其映射到公共 IP。)
    猜你喜欢
    • 1970-01-01
    • 2017-03-31
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多