Apache spark Spark/Python-返回IP地址。

Apache spark Spark/Python-返回IP地址。,apache-spark,pyspark,Apache Spark,Pyspark,我是新手。我在本地设置了主集群(192.168.33.10)和从集群(192.168.33.12),并编写了以下脚本来演示主集群和从集群都在自己的机器上运行get_ip_wrap() 但是,当我使用命令/bin/spark submit ip.py运行时,我只在输出中看到192.168.33.10,我也希望在输出中看到192.168.33.12 ['192.168.33.10', '192.168.33.10', '192.168.33.10', '192.168.33.10', '192.16

我是新手。我在本地设置了主集群(192.168.33.10)和从集群(192.168.33.12),并编写了以下脚本来演示主集群和从集群都在自己的机器上运行get_ip_wrap()

但是,当我使用命令
/bin/spark submit ip.py
运行时,我只在输出中看到
192.168.33.10
,我也希望在输出中看到
192.168.33.12

['192.168.33.10', '192.168.33.10', '192.168.33.10', '192.168.33.10', '192.168.33.10']
我是不是遗漏了什么

import socket
import fcntl
import struct
from pyspark import SparkContext, SparkConf

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR                                                                                                               
        struct.pack('256s', ifname[:15])
    )[20:24])

def get_ip_wrap(num):
    return get_ip_address('eth1')

conf = SparkConf().setAppName('appName').setMaster('local')
sc = SparkContext(conf=conf)

data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)

result = distData.map(get_ip_wrap)
print result.collect()

当您说
conf=SparkConf().setAppName('appName').setMaster('local')
时,您明确告诉spark以本地模式运行。这意味着应用程序在主节点上运行单线程

要修复它,请摆脱
.setMaster('local')
调用,改为执行类似
.setMaster('warn')
的操作(如果warn是您的集群管理器)。有关您的选项,请参见此处:


或者,您可以使用
--master
选项启动
spark submit
bin。文档似乎建议您这样做,但如果我没记错的话,我认为您可以在应用程序中设置主机(但可能不行,我现在无法测试)。

当您说
conf=SparkConf().setAppName('appName').setMaster('local')
时,您明确告诉spark在本地模式下运行。这意味着应用程序在主节点上运行单线程

要修复它,请摆脱
.setMaster('local')
调用,改为执行类似
.setMaster('warn')
的操作(如果warn是您的集群管理器)。有关您的选项,请参见此处:

或者,您可以使用
--master
选项启动
spark submit
bin。文档似乎建议您这样做,但如果我没记错的话,我认为您可以在应用程序中设置master(但可能不行,我现在无法测试它)