通过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返回给驱动程序,所以我想我应该看到文本。
有人可以帮我吗?我做错了什么?
非常感谢,
威尔
答案 0 :(得分:0)
如果群集模式是指使用--deploy-mode cluster
提交代码,则驱动程序不会在主计算机上运行,而是在其中一个工作程序上运行。