2017-05-27 59 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選項啓動​​箱。這就是文檔似乎暗示你所做的事情,但如果我沒有記錯的話,我認爲你可以在應用程序中設置主人(但也許不是,我現在無法測試它)。