Spark Streaming:在群集模式下运行时无法收集()DStream

时间:2015-11-13 18:28:57

标签: apache-spark pyspark spark-streaming

通过PySpark绑定到Spark 1.3.1运行代码时,我遇到了一个奇怪的问题。

请考虑以下代码:

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连接,我输入的文本将打印在运行Spark的机器的控制台上。大。

但是,如果我对代码的第一行进行一次更改:sc = SparkContext()(这将导致它以群集模式启动,并且驱动程序在本地计算机上运行) ,我的文字没有打印到控制台 - 虽然我可以看到像

这样的消息
  

INFO BlockManagerMaster:更新了块输入信息-0-1447438549400

正在打印到控制台,所以我知道它仍在拾取通过TCP端口传入的文本。

这很奇怪,因为collect()动作应该强制将DStream中的RDD返回给驱动程序,所以我想我应该看到文本。

有人可以帮我吗?我做错了什么?

非常感谢,

威尔

1 个答案:

答案 0 :(得分:0)

如果群集模式是指使用--deploy-mode cluster提交代码,则驱动程序不会在主计算机上运行,​​而是在其中一个工作程序上运行。

Check the documentation了解详情。