我已按照以下方式安装了系统:
- 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的集群?
答案 0 :(得分:0)
我建议您拥有所有私人设置或所有公共设置。不在两者之间。
通常,您希望所有内容都是私有的,如果您需要向外部公开任何数据,您只需在公共IP上公开数据端点。例如,运行所有火花作业并将数据存储在S3中。然后在存储桶上启用S3公共访问。使用私有IP通常更安全。
关于mesos master上的--advertise-ip
参数。那个mesos奴隶找到了mesos大师。那里的问题不会支持公共,私人组合,所以你必须做一个或另一个。您可以在连接到公共IP的mesos机器上运行spark工作负载,但这意味着您必须为这些机器提供可访问的zookeeper等。