【发布时间】:2018-03-22 22:40:04
【问题描述】:
我在 docker 容器中使用 hadoop 集群(我使用的是覆盖网络)
我在同一主机中有 2 个容器(master 和 slave2) 另一个在不同的主机(slave1)
容器可以访问仅由它们使用的本地网络10.0.0.0
master和slave2容器也可以访问另一个与主机172.18.0.0共享的网络
Slave1 可以访问与其主机共享的不同网络172.18.0.0
两台主机中的网络172.18.0.0是独立的。
所以要恢复每个容器都有两个 ip 地址
- 主人:
10.0.0.2和172.18.0.2 - salve2:
10.0.0.3和172.18.0.3 - salve3;
10.0.0.4和172.18.0.2
树容器必须与 trow 10.0.0.0 网络通信。但是发生了一些奇怪的事情。
当我在 pyspark 中运行这个脚本时
def getIP(iter):
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
return [s.getsockname()[0]]
rdd = sc.parallelize(range(3),3)
hosts = rdd.mapPartitions(getIP).collect()
for h in hosts:
print(h)
这个问题的输出是
172.18.0.2
172.18.0.3
172.18.0.3
这是错误的,因为容器只能通信 throw 10.0.0.0 网络接口。
这是我的yarn-site.xml 文件
<configuration>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>
yarn.nodemanager.aux-services.mapreduce_shuffle.class
</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master</value>
</property>
</configuration>
hadoop-master 是地址 10.0.0.2 的主机名
如何让 spark 使用 10.0.0.2 接口。
谢谢。
【问题讨论】:
标签: apache-spark hadoop docker pyspark network-interface