2017-10-11 50 views
0

我已经安装了为遵循系统:Mesos星火从试图连接到主私用IP而不是公网IP

--mesos主10.xx2私有IP,公共35.xx6

--mesos从属专用IP 192.xx10,公共111.xx2

现在,主设备将任务成功分配给从设备,但是,任务失败。作为跟随错误信息:

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

造成前:org.apache.spark .rpc.RpcTimeoutException:无法在120秒内收到 任何回复。这超时由 spark.rpc.askTimeout控制

当我看环境,spark.driver.host点到主10.xx2,而不是它的公网IP地址35的私有IP地址.xx6。我看着Wireshark捕获,事实上,TCP主包的IP地址是失败的。

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

错误TaskSchedulerImpl:失落的执行1对 myhostname.singnet.com.sg:无法创建执行人因 无法分配请求地址:

从我的理解中,spark.driver.bindAddress设置它为主和从属,因此奴隶得到所述错误。 现在我真的很想知道如何正确设置启动这个群集上的公共IP?

回答

0

我推荐你有全部私人设置或全部公共设置。不在中间。

一般而言,您希望一切都是私有的,如果您需要暴露于外部的任何数据,则只需公开IP上的数据端点。例如,运行所有的火花作业并将数据存储在S3中。然后在存储桶上启用S3公共访问。使用专用IP通常更安全。

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

+0

感谢您的回答。据我的网络知识,我没有看到一个场景,我可以有一个所有公共设置。每台暴露给公共IP地址的计算机都会分配一个专用于其内部网络的地址。公共IP不是机器本身,而是路由器(如果我错了,请纠正我)。 Mesos通过包含--advertise_IP参数解决了这个问题,所以机器可以通过连接到这个地址(这是公开的)来找到对方。我不确定它是如何在Spark上实现的。 – TheCyberliem

+0

@ TheCyber​​liem当然。检查我的除了答案 – Rico

+0

感谢您的答复。然而,如果你仔细阅读我的问题描述,你会发现,如果没有私有IP,你不能拥有所有公共设置(正如我所提到的,公共IP永远不在机器上,而是在路由器上,所以机器拥有私有IP路由器将其映射到公共IP。) – TheCyberliem