【问题标题】:Execution order of code in Spark StreamingSpark Streaming中代码的执行顺序
【发布时间】:2017-01-26 08:45:57
【问题描述】:

在 Spark 流中 val lines = ssc.socketTextStream("localhost",1234) 行将创建一个 DStream(Rdd 的集合),但我很困惑,因为总是有逐行顺序执行的代码,那么上面的代码行将如何继续生成 DStream。 在此之后,当应用转换时“val words = lines.print()” 此行如何打印给定 Rdd 中存在的所有数据,因为 val lines = ssc.socketTextStream("localhost",1234) 已经处于运行模式。 在这个过程中是否执行了无限循环? 请告诉我 Spark Streaming 流程的流程 谢谢

【问题讨论】:

标签: apache-spark spark-streaming


【解决方案1】:

Spark 的转换是惰性的。这意味着在调用某个操作之前不会调用任何内容。

这对你意味着什么?

  1. val lines = ssc.socketTextStream("localhost",1234) 创建一个 DStream。现在什么都没有读取,只是 DStream 是根据将来读取的源数据的配置创建的。

  2. val words = lines.print() 上,您声明将打印第一个点创建的每个 RDD。 words 变量现在由 2 个声明组成:数据源(第 1 点)和将被调用的第一个操作(print())。

  3. ssc.start() 开始执行。然后 Spark 创建所有必要的背景类,等等 - 你现在不需要知道 :) 重要的是 Spark Context 知道使用此上下文创建的每个 RDD。这个 StreamingContext 有关于单词 DStream 的信息,在ssc.start() 之后,Spark 将从源中读取数据,然后将它们传递给print() 函数。

换句话说 - 您没有调用您正在输入的操作/转换。您只是声明您希望它们被调用。它与 SQL 引擎中的执行计划非常相似。在调用start() 以及在 Spark 创建 DStream 中的每个 RDD 之后,Spark Context 将执行您想要的操作和转换。 DStreams 是由 Spark 在某个循环中创建的,但这对您来说是透明的

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多