【问题标题】:Spark Streaming: cannot collect() a DStream when running in cluster modeSpark Streaming:在集群模式下运行时无法收集() DStream
【发布时间】:2015-11-13 18:28:56
【问题描述】:

通过 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 返回给驱动程序,所以我想我应该看到文本。

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

非常感谢,

会

【问题讨论】:

    标签: apache-spark pyspark spark-streaming


    【解决方案1】:

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

    Check the documentation 了解更多详情。

    【讨论】:

    • 嗨@mar​​ius-soutier,感谢您的回复。我没有清楚地解释自己。在第二种情况下,我在不使用 --deploy-mode 参数的情况下提交作业。文档说这应该默认以客户端模式启动作业。据我了解,驱动程序应该在 localhost 上运行,并且作业联合到集群中的从节点。这就是为什么我希望 collect() 后跟 print 在控制台上显示输出。
    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多