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