网络 – 在具有docker容器的独立群集上使用Spark SPARK_PUBLIC_DNS和SPARK_LOCAL_IP

前端之家收集整理的这篇文章主要介绍了网络 – 在具有docker容器的独立群集上使用Spark SPARK_PUBLIC_DNS和SPARK_LOCAL_IP前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

到目前为止,我只在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,计算大部分时间仍然有效,但并非总是如此
>绑定到0.0.0.0,奴隶与主人交谈并建立一些连接但它死了,另一个奴隶出现并消失,他们继续像这样循环
>绑定到主机ip,启动失败,因为在容器中看不到ip,但是当配置端口转发时其他人可以访问

我想知道为什么连接到从设备时没有使用配置的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虚拟机,具有桥接网络)
>驱动程序从其他Windows机器提交作业,效果很好
>用于启动从站的Docker镜像被分发为“已保存”.tar.gz文件,已加载(curl xyz | gunzip | docker load)并在网络中的其他计算机上启动,此探针具有私有/公共ip配置

最佳答案
我在我的机器上运行了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.
>我正在传递-e SPARK_LOCAL_IP =“${HOST_IP}”,这会导致Web UI绑定到该地址而不是容器的IP,但Web UI可以正常工作.

工人:

>我给worker容器一个不同的主机名,并将它作为–host传递给Spark org.apache.spark.deploy.master.Worker类.它不能与主机或Akka集群不相同:-h“dockerhost-worker”
>我正在使用Docker的add-host,因此容器能够将主机名解析为主IP: – add-host dockerhost-master:${HOST_IP}
>需要传递的主URL是spark:// dockerhost-master:7077

Jupyter:

>这个需要主URL和add-host才能解决
> SparkContext存在于笔记本中,而且是启动Spark应用程序的Web UI的地方,而不是主服务器.默认情况下,它绑定到Docker容器的内部IP地址.要改变我必须传入的内容:-e SPARK_PUBLIC_DNS =“${VM_IP}” – p 4040:4040.笔记本电脑的后续应用程序将在4041,4042等.

通过这些设置,三个组件能够相互通信.我正在使用带有spark-class的自定义启动脚本来启动前台的类,并防止Docker容器暂时退出.

还有一些其他端口可以暴露,例如历史服务器,我还没有遇到过.使用–net host似乎更简单.

猜你在找的Docker相关文章