2017-05-27 7 views
0

私はスパークが初めてです。私はマスター(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')のようにします(糸があなたのクラスタマネージャである場合)。あなたのオプションについてはこちらをご覧ください:https://spark.apache.org/docs/latest/submitting-applications.html#master-urls

また、--masterオプションを使用して​​ビンを起動することもできます。これはドキュメントがあなたのことを示唆しているようですが、私が正しく覚えていれば、アプリケーションでマスターを設定できると思います(しかし、今はテストできません)。

関連する問題