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返回給驅動程序,所以我認爲我應該看到文本。
任何人都可以幫助我嗎?我究竟做錯了什麼?
與許多感謝,
請問
嗨@ marius-soutier,謝謝你的迴應。我沒有清楚地解釋自己。在第二種情況下,我在不使用'--deploy-mode'參數的情況下提交作業。文檔說這應該默認以_client mode_啓動作業。據我所知,驅動程序應該在本地主機上運行,並將作業聯合到羣集中的從節點上。這就是爲什麼我期望'collect()'後面跟着'print'以在控制檯上顯示輸出的原因。 –