Spark/Python - 取回IP地址。
问题描述:
我是Spark的新手。我在本地设置了主设备(192.168.33.10)和从设备(192.168.33.12)集群,并且我写信给以下脚本演示主设备和从设备在其自己的机器上运行get_ip_wrap()。Spark/Python - 取回IP地址。
但是,当我运行命令./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('yarn')
之类的操作(如果yarn是您的群集管理器)。在这里查看您的选择:https://spark.apache.org/docs/latest/submitting-applications.html#master-urls。
或者,您可以使用--master
选项启动箱。这就是文档似乎暗示你所做的事情,但如果我没有记错的话,我认为你可以在应用程序中设置主人(但也许不是,我现在无法测试它)。