2015-11-13 128 views
1

當通過PySpark綁定到Spark 1.3.1運行代碼時,出現一個奇怪的問題。Spark Streaming:在集羣模式下運行時無法收集()DStream

考慮下面的代碼:

sc = SparkContext("local[1]") 
ssc = StreamingContext(sc, 10) 

myStream = ssc.socketTextStream("localhost", 4663) 

def f(rdd): 
    rows = rdd.collect() 
    for r in rows: 
     print r 

myStream.foreachRDD(f) 

ssc.start()    
ssc.awaitTermination() 

現在,如果我運行上面的代碼,並經由連接nc -lk 4663,文本I型打印出所述機器運行火花的控制檯上。大。

然而,如果我對代碼做的第一線單一變化:sc = SparkContext()(這將導致它在集羣模式在本地機器上運行的驅動程序啓動),我的文字不會被打印到控制檯 - 雖然我可以看到的消息像

信息BlockManagerMaster:塊輸入0-1447438549400

被打印到控制檯的更新信息,所以我知道它仍然拿起文本正在通過TCP端口進入。

這很奇怪,因爲collect()操作應該強制將DStream中的RDD返回給驅動程序,所以我認爲我應該看到文本。

任何人都可以幫助我嗎?我究竟做錯了什麼?

與許多感謝,

請問

回答

0

如果羣集模式你的意思是使用--deploy-mode cluster提交你的代碼,該驅動程序沒有主計算機上運行,​​但其中一名工人。

Check the documentation瞭解更多詳情。

+0

嗨@ marius-soutier,謝謝你的迴應。我沒有清楚地解釋自己。在第二種情況下,我在不使用'--deploy-mode'參數的情況下提交作業。文檔說這應該默認以_client mode_啓動作業。據我所知,驅動程序應該在本地主機上運行,​​並將作業聯合到羣集中的從節點上。這就是爲什麼我期望'collect()'後面跟着'print'以在控制檯上顯示輸出的原因。 –

相關問題