当前位置: 首页 > 面试题库 >

在具有Docker容器的独立集群上执行Spark SPARK_PUBLIC_DNS和SPARK_LOCAL_IP

鞠隐水
2023-03-14
问题内容

到目前为止,我仅在Linux机器和VM(桥接网络)上运行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主服务器正在其他主机上运行机器,而不是在Docker内部。我正在从网络内的另一台计算机启动Spark作业,可能还运行了一个奴隶本身。

我尝试过的事情:

  1. 完全不配置SPARK_LOCAL_IP,从属服务器绑定到容器的ip(如172.17.0.45),无法从主服务器或驱动程序连接到该主机,计算在大多数时间仍然有效,但并非总是如此
  2. 绑定到0.0.0.0,从站与主站对话并建立一些连接,但它死了,另一个从站出现并消失,他们继续像这样循环
  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上的VM)
  • 驱动程序从其他Windows计算机提交作业,效果很好
  • 用于启动从站的Docker映像以“已保存” .tar.gz文件的形式分发,加载(curl xyz | gunzip | docker load)并在网络内的其他计算机上启动,该探针具有私有/公共ip配置

问题答案:

我想我找到了针对我的用例(一个Spark容器/主机OS)的解决方案:

  1. --net hostdocker run=>主机的eth0 一起使用在容器中可见
  2. 设置SPARK_PUBLIC_DNSSPARK_LOCAL_IP为主机的IP,忽略docker0的172.xxx地址

Spark可以绑定到主机的ip,其他机器也可以与之通信,端口转发负责其余的工作。不需要DNS或任何复杂的配置,我还没有对此进行全面的测试,但是到目前为止还不错。

编辑:请注意,这些说明适用于Spark 1.x,仅在Spark
2.x才SPARK_PUBLIC_DNS需要,我认为SPARK_LOCAL_IP已弃用。



 类似资料:
  • null sbin/start-slave.sh spark://c96___37fb:7077--用于并置从机的端口7078 sbin/start-slave.sh spark://masternodeip:7077--其他两个从机的端口7078 前面引用的所有端口都从nodeMaster重定向到相应的Docker。 因此,webUI向我显示,我的集群有3个连接的节点,不幸的是,当运行时,只有并

  • 问题内容: 我有一个运行Node.js的api服务器,该服务器正在使用它的集群模块,并且测试看起来还不错。现在,我们的IT部门希望转而使用令我感到高兴的Docker容器,但除了玩转之外,我从未真正使用过它。但是我有一个想法,Node.js应用程序在单个Docker进程中运行,因此集群模块并不是最好的,因为单个Docker进程可能是安装过程中的一个慢点,直到在该进程中拆分请求为止通过集群模块。 因此

  • 工人出现在图片上。为了运行我的代码,我使用了以下命令:

  • 我试图设置一个独立的Spark2.0服务器来并行处理分析功能。为此,我希望有一个带有多个执行者的工作人员。 我在使用: 独立Spark 2.0 8核 24gig ram Windows server 2008 pyspark(尽管这看起来不相关)

  • 我只是从Mesos、Docker和马拉松开始,但我找不到任何地方可以回答这个特定的问题。我想建立一个运行在Docker上的Mesos集群--有几个internet资源可以做到这一点,但我想在Mesos本身上运行Docker容器。这意味着Docker容器运行在其他Docker容器中。

  • 我有几十个php应用程序,我想dockerize。我想知道什么是管理和性能方面的最佳设计。 > 一个包含所有服务的大容器(php fpm、mysql、nginx等) 所有服务的单独容器: container-php-fpm-app1 容器-nginx-app1 container-mysql-app1 container-php-fpm-app2 容器-nginx-app2 container-m