网络 – 在具有docker容器的独立群集上使用Spark SPARK_PUBLIC_D
到目前为止,我只在Linux机器和虚拟机(桥接网络)上运行Spark,但现在我对利用更多计算机作为奴隶感兴趣.在计算机上分发Spark Slave Docker容器并让它们自动连接到硬编码的Spark master ip会很方便.这个缺点已经完成,但是我无法在从属容器上配置正确的SPARK_LOCAL_IP(或start-slave.sh的–host参数). 我认为我正确配置了SPARK_PUBLIC_DNS env变量以匹配主机的网络可访问ip(来自10.0.x.x地址空间),至少它显示在Spark主Web UI上并且可由所有机器访问. 我还按照http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html的指示设置了SPARK_WORKER_OPTS和Docker端口转发,但在我的情况下,Spark主控器在另一台机器上运行,而不是在Docker内运行.我正在从网络中的其他机器启动Spark作业,可能还运行从机本身. 我试过的事情: >根本没有配置SPARK_LOCAL_IP,slave绑定到容器的ip(如172.17.0.45),无法连接到master或driver,计算大部分时间仍然有效,但并非总是如此 我想知道为什么连接到从设备时没有使用配置的SPARK_PUBLIC_DNS?我以为SPARK_LOCAL_IP只会影响本地绑定,但不会泄露给外部计算机. 在https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/troubleshooting/connectivity_issues.html,他们指示“将SPARK_LOCAL_IP设置为驱动程序,主服务器和工作进程的集群可寻址主机名”,这是唯一的选择吗?我会避免额外的DNS配置,只需使用ips配置计算机之间的流量.或者有一种简单的方法来实现这一目标吗? 编辑: > Master在Linux上运行(Windows上的VirtualBox虚拟机,具有桥接网络) 最佳答案
我在我的机器上运行了3种不同类型的docker容器,目的是在我们需要的所有软件都添加到云中时将它们部署到云中:Master,Worker和Jupyter笔记本(使用Scala,R和Python内核).
以下是我的观察结果: 主: >我无法将其绑定到Docker主机IP.相反,我将一个组成的域名传递给它:-h“dockerhost-master”-e SPARK_MASTER_IP =“dockerhost-master”.我无法找到一种方法让Akka绑定到容器的IP,但接受针对主机IP的消息.我知道这可能与Akka 2.4有关,但也许不适用于Spark. 工人: >我给worker容器一个不同的主机名,并将它作为–host传递给Spark org.apache.spark.deploy.master.Worker类.它不能与主机或Akka集群不相同:-h“dockerhost-worker” Jupyter: >这个需要主URL和add-host才能解决它 通过这些设置,三个组件能够相互通信.我正在使用带有spark-class的自定义启动脚本来启动前台的类,并防止Docker容器暂时退出. 还有一些其他端口可以暴露,例如历史服务器,我还没有遇到过.使用–net host似乎更简单. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |