Nik*_*yrh 10 networking docker apache-spark
到目前为止,我只在Linux机器和虚拟机(桥接网络)上运行Spark,但现在我对使用更多计算机作为奴隶感兴趣.在计算机上分发Spark Slave Docker容器并让它们自动连接到硬编码的Spark master ip会很方便.这个缺点已经工作但是我在从属容器上配置正确的SPARK_LOCAL_IP(或start-slave.sh的--host参数)时遇到了问题.
我认为我正确配置了SPARK_PUBLIC_DNS env变量以匹配主机的网络可访问ip(来自10.0.xx地址空间),至少它显示在Spark主Web UI上并且可供所有机器访问.
我还按照http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html的说明设置了SPARK_WORKER_OPTS和Docker端口转发,但在我的情况下,Spark master正在另一个上运行机器而不是Docker内部.我正在从网络中的其他机器启动Spark作业,可能还运行从机本身.
我试过的事情:
我想知道为什么连接到从设备时没有使用配置的SPARK_PUBLIC_DNS?我以为SPARK_LOCAL_IP只会影响本地绑定但不会泄露给外部计算机.
在https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/troubleshooting/connectivity_issues.html,他们指示"将SPARK_LOCAL_IP设置为驱动程序,主服务器和工作进程的集群可寻址主机名",这是唯一的选择吗?我会避免额外的DNS配置,只需使用ips配置计算机之间的流量.或者有一种简单的方法来实现这一目标吗?
编辑: 总结当前设置:
Aa'*_*shh 11
我正在我的机器上运行3种不同类型的docker容器,目的是在我们需要的所有软件添加到云中时将它们部署到云中:Master,Worker和Jupyter笔记本(带有Scala,R和Python内核).
以下是我的观察结果:
主:
-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可以正常工作.工人:
--host给Spark org.apache.spark.deploy.master.Worker类.它不能与主机或Akka集群不相同:-h "dockerhost-worker"add-host因此容器能够将主机名解析为主IP:--add-host dockerhost-master:${HOST_IP}spark://dockerhost-master:7077Jupyter:
add-host能够解决它SparkContext笔记本中的生命和启动Spark应用程序的Web UI的地方,而不是主人.默认情况下,它绑定到Docker容器的内部IP地址.改变我必须传递的:-e SPARK_PUBLIC_DNS="${VM_IP}" -p 4040:4040.笔记本电脑的后续应用程序将在4041,4042等.通过这些设置,三个组件能够相互通信.我正在使用自定义启动脚本spark-class在前台启动类,并防止Docker容器暂时退出.
还有一些其他可以暴露的端口,例如我还没有遇到过的历史服务器.使用--net host似乎更简单.
我想我找到了一个用例(一个Spark容器/主机操作系统)的解决方案:
--net host与docker run=> host的eth0 一起使用在容器中可见SPARK_PUBLIC_DNS并SPARK_LOCAL_IP托管ip,忽略docker0的172.xxx地址Spark可以绑定到主机的ip,其他机器也可以与它通信,端口转发负责其余的工作.不需要DNS或任何复杂的配置,我没有彻底测试过这个,但到目前为止一直很好.
编辑:请注意,这些说明适用于Spark 1.x,只SPARK_PUBLIC_DNS需要Spark 2.x ,我认为SPARK_LOCAL_IP不推荐使用.
小智 7
我也在不同的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 ...
Run Code Online (Sandbox Code Playgroud)
哪个$PUBLIC_HOSTNAME是主服务器可以访问的主机名.
缺失的部分是SPARK_LOCAL_HOSTNAMEAFAICT无证件.
| 归档时间: |
|
| 查看次数: |
12746 次 |
| 最近记录: |