2015-11-13 152 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'以在控制台上显示输出的原因。 –

相关问题