Networking Spark Spark_PUBLIC_DNS和Spark_LOCAL_IP位于带有docker容器的独立群集上
到目前为止,我只在Linux机器和VM(桥接网络)上运行Spark,但现在我对利用更多计算机作为从机很感兴趣。在计算机上分发Spark Slave Docker容器并让它们自动连接到硬编码的Spark master ip是很方便的。这一缺陷已经起作用了,但我在从容器上配置正确的SPARK_LOCAL_IP(或——start slave.sh的主机参数)时遇到了问题 我认为我正确地配置了SPARK_PUBLIC_DNS env变量,以匹配主机的网络可访问ip(从10.0.x.x地址空间),至少它显示在SPARK master web UI上并可供所有机器访问 我还按照中的指示设置了SPARK_WORKER_选项和Docker端口,但在我的情况下,SPARK master正在其他机器上运行,而不是在Docker内部。我正在网络中的另一台机器上启动Spark jobs,可能还运行着一个从机本身 我尝试过的事情:Networking Spark Spark_PUBLIC_DNS和Spark_LOCAL_IP位于带有docker容器的独立群集上,networking,apache-spark,docker,Networking,Apache Spark,Docker,到目前为止,我只在Linux机器和VM(桥接网络)上运行Spark,但现在我对利用更多计算机作为从机很感兴趣。在计算机上分发Spark Slave Docker容器并让它们自动连接到硬编码的Spark master ip是很方便的。这一缺陷已经起作用了,但我在从容器上配置正确的SPARK_LOCAL_IP(或——start slave.sh的主机参数)时遇到了问题 我认为我正确地配置了SPARK_PUBLIC_DNS env变量,以匹配主机的网络可访问ip(从10.0.x.x地址空间),至少它显
- Master在Linux上运行(Windows上VirtualBox上的虚拟机与桥接网络)
- 驱动程序从其他Windows计算机提交作业,效果很好
- 用于启动从属服务器的Docker映像作为“保存的”.tar.gz文件分发,加载(curl xyz | gunzip | Docker load)并在网络中的其他机器上启动,在私有/公共ip配置中存在此问题
--net host
和docker run
=>主机的eth0在容器中可见SPARK\u PUBLIC\u DNS
和SPARK\u LOCAL\u IP
设置为主机的IP,忽略docker0的172.x.x.x地址编辑:请注意,这些说明是针对Spark 1.x的,在Spark 2.x上只需要
Spark\u PUBLIC\u DNS
,我认为Spark\u LOCAL\u IP
已被弃用。我正在我的机器上运行3种不同类型的docker容器,目的是在我们需要的所有软件都添加到其中时将它们部署到云中:Master,Worker和Jupyter笔记本(带有Scala、R和Python内核)
以下是我迄今为止的观察结果:
主机:
- 我无法将其绑定到Docker主机IP。相反,我将一个虚构的域名传递给它:
。我找不到一种方法使Akka绑定到容器的IP上,而接受主机IP上的消息。我知道Akka 2.4是可能的,但Spark可能不行-h“dockerhost master”-e SPARK\u master\u IP=“dockerhost master”
- 我正在传入
,这会导致Web UI绑定到该地址,而不是容器的IP,但Web UI无论以哪种方式都可以正常工作-e SPARK\u LOCAL\u IP=“${HOST\u IP}”
- 我给了worker容器一个不同的主机名,并将其作为
传递给Spark--host
类。它不能与master的相同,否则Akka群集将无法工作:org.apache.Spark.deploy.master.worker
-h“dockerhost worker”
- 我正在使用Docker的
,因此容器能够将主机名解析为主机的IP:添加主机
--添加主机dockerhost主机:${host_IP}
- 需要传递的主URL是
spark://dockerhost-master:7077
- 这一个需要主URL和
才能解析它添加主机
位于笔记本中,这是Spark应用程序的web UI启动的地方,而不是主界面。默认情况下,它绑定到Docker容器的内部IP地址。要改变这一点,我必须传入:SparkContext
。笔记本的后续应用程序将在4041、4042等上-e SPARK\u PUBLIC\u DNS=“${VM\u IP}”-p 4040:4040
spark class
的自定义启动脚本在前台启动类,并防止Docker容器退出
还有一些其他端口可以公开,比如我还没有遇到的历史服务器。使用
--net host
似乎简单得多。我还在不同docker主机上的容器中运行spark。使用以下参数启动worker容器对我有效:
docker run \
-e SPARK_WORKER_PORT=6066 \
-p 6066:6066 \
-p 8081:8081 \
--hostname $PUBLIC_HOSTNAME \
-e SPARK_LOCAL_HOSTNAME=$PUBLIC_HOSTNAME \
-e SPARK_IDENT_STRING=$PUBLIC_HOSTNAME \
-e SPARK_PUBLIC_DNS=$PUBLIC_IP \
spark ...
其中,$PUBLIC\u HOSTNAME
是可从主机访问的主机名
缺少的部分是
SPARK\u LOCAL\u HOSTNAME
,一个未记录的AFAICT选项
您到底打算如何使用c语言