到目前为止,我只在Linux机器和VM(桥接网络)上运行Spark,但是现在我对使用更多的计算机作为奴隶很感兴趣。这将是方便分发一个火种奴隶码头集装箱在计算机上,并让他们自动连接到一个硬编码的火花主ip。这一不足已经完成了,但我在从容器上配置正确的SPARK_LOCAL_IP (或--start-slve.sh的主机参数)时遇到了困难。
我认为我正确地配置了SPARK_PUBLIC_DNS env变量以匹配主机的网络访问ip (来自10.0.x.x地址空间),至少它显示在Spark上,并且所有机器都可以访问。
我还按照http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html的指示设置了http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html和Docker端口,但在我的例子中,Spark正在另一台机器上运行,而不是在Docker内部运行。我正在从网络中的另一台机器启动Spark作业,可能还运行一个从机本身。
我尝试过的事情:
我想知道为什么在连接到奴隶时没有使用配置好的SPARK_PUBLIC_DNS?我认为SPARK_LOCAL_IP只会影响本地绑定,而不会透露给外部计算机。
在issues.html,他们指示“将SPARK_LOCAL_IP设置为驱动程序、主进程和工作进程的可寻址主机名”,这是唯一的选择吗?我将避免额外的DNS配置,只需使用ips来配置计算机之间的通信量。还是有一个简单的方法来实现这一点?
编辑:总结当前的设置:
发布于 2015-09-23 10:53:27
我想我找到了一个用例解决方案(一个星火容器/主机操作系统):
--net host
with docker run
=>主机的eth0在容器中可见SPARK_PUBLIC_DNS
和SPARK_LOCAL_IP
设置为主机的ip,忽略docker0 0的172.x.x.x地址Spark可以绑定到主机的ip和其他机器与其通信,端口转发负责其余的事务。DNS或任何复杂的信任是不需要的,我还没有彻底测试这一点,但到目前为止还不错。
编辑:请注意,这些说明是针对Spark1.x的,在Spark2.x只需要SPARK_PUBLIC_DNS
,我认为SPARK_LOCAL_IP
是不推荐的。
发布于 2017-04-21 17:36:46
我也运行在不同的码头主机的容器火花。使用这些参数启动工人容器对我有用:
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_HOSTNAME
是一个主机名,可以从主服务器获得。
缺失的部分是SPARK_LOCAL_HOSTNAME
,一种无证的AFAICT选项。
发布于 2015-11-17 17:29:15
我正在我的机器上运行3种不同类型的对接容器,目的是在我们所需的所有软件都添加到云中时将它们部署到云中: Master、Worker和木星笔记本(带有Scala、R和Python内核)。
以下是我迄今为止的观察:
硕士:
-h "dockerhost-master" -e SPARK_MASTER_IP="dockerhost-master"
。我找不到一种方法使Akka绑定到容器的IP上,但是接受针对主机IP的消息。我知道使用Akka 2.4是可能的,但可能不是用火花。-e SPARK_LOCAL_IP="${HOST_IP}"
,这会导致Web绑定到该地址,而不是容器的IP,但是Web的工作方式都很好。工作者:
--host
传递给Sparkorg.apache.spark.deploy.master.Worker
类。它不可能与主集群或Akka集群不工作相同:-h "dockerhost-worker"
add-host
,因此容器能够将主机名解析为主IP:--add-host dockerhost-master:${HOST_IP}
spark://dockerhost-master:7077
木星:
add-host
才能解决它。SparkContext
生活在笔记本中,而这正是启动星火应用程序的web的地方,而不是主程序。默认情况下,它绑定到Docker容器的内部IP地址。要更改我必须传入的内容:-e SPARK_PUBLIC_DNS="${VM_IP}" -p 4040:4040
。随后来自笔记本的申请将是4041,4042等。有了这些设置,三个组件就可以相互通信。我正在使用带有spark-class
的自定义启动脚本来启动前台类,同时防止Docker容器暂时退出。
还有一些其他端口可以公开,比如历史服务器,我还没有遇到这些端口。使用--net host
似乎要简单得多。
https://stackoverflow.com/questions/32719007
复制相似问题