2017-05-27 60 views
0

我是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() 

回答

1

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

要修复它,请拨打.setMaster('local')电话,然后执行诸如.setMaster('yarn')之类的操作(如果yarn是您的群集管理器)。在这里查看您的选择:https://spark.apache.org/docs/latest/submitting-applications.html#master-urls

或者,您可以使用--master选项启动​​箱。这就是文档似乎暗示你所做的事情,但如果我没有记错的话,我认为你可以在应用程序中设置主人(但也许不是,我现在无法测试它)。