spark:使用了错误的网络接口

jjjwad0x  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(326)

我在docker容器中使用hadoop集群(我使用覆盖网络)
我在同一个主机(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 补救措施2: 10.0.0.3 以及 172.18.0.3 救助3; 10.0.0.4 以及 172.18.0.2 树容器必须通过TROW10.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

这是错误的,因为容器只能通过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接口。
谢谢您。

rqcrx0a6

rqcrx0a61#

我不认为你的spark使用了错误的网络,否则你甚至不能运行这个程序。
你的 getIP 方法返回用于连接的主机的ip地址 8.8.8.8 . 正如您所描述的,所有主机都有两个网络 10.0.0.* 仅由这3个节点共享。所以主人用 172.18.0.* 连接 8.8.8.8 .
你可以试着看看 s.connect(("8.8.8.8", 80)) , s.connect(("10.0.0.2", 80)) 以及 s.connect(("localhost", 80)) .

相关问题