相关疑难解决方法(0)

具有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.xx地址空间),至少它显示在Spark主Web UI上并且可供所有机器访问.

我还按照http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html的说明设置了SPARK_WORKER_OPTS和Docker端口转发,但在我的情况下,Spark master正在另一个上运行机器而不是Docker内部.我正在从网络中的其他机器启动Spark作业,可能还运行从机本身.

我试过的事情:

  1. 根本没有配置SPARK_LOCAL_IP,slave绑定到容器的ip(如172.17.0.45),无法连接到master或driver,计算大部分时间仍然有效,但并不总是
  2. 绑定到0.0.0.0,奴隶与master交谈并建立一些连接但它死了,另一个奴隶出现并消失,他们继续像这样循环
  3. 绑定到主机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配置

networking docker apache-spark

10
推荐指数
3
解决办法
1万
查看次数

标签 统计

apache-spark ×1

docker ×1

networking ×1