Mesos Spark Slave试图连接到私有IP而不是公共IP

时间:2017-10-11 23:07:30

标签: apache-spark networking mesos

我已按照以下方式安装了系统:

- mesos主私有IP 10.x.x.2,Public 35.x.x.6

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

现在,主服务器已成功将任务分配给从服务器,但任务失败。错误消息如下:

  

线程中的异常" main" 17/10/11 22:38:01错误RpcOutboxMessage:   在成功连接之前询问超时

     

引起:org.apache.spark.rpc.RpcTimeoutException:无法接收   任何回复120秒。此超时由   spark.rpc.askTimeout

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

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

  

ERROR TaskSchedulerImpl:丢失执行程序1   myhostname.singnet.com.sg:由于无法创建执行程序   无法分配请求的地址:

根据我的理解,spark.driver.bindAddress为主设备和从设备设置它,因此从设备得到了所述错误。 现在我真的想知道如何正确设置火花来处理这种基于公共IP的集群?

1 个答案:

答案 0 :(得分:0)

我建议您拥有所有私人设置或所有公共设置。不在两者之间。

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

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