【问题标题】:How does Spark streaming and Dstream work?Spark 流式传输和 Dstream 是如何工作的?
【发布时间】:2015-11-10 16:51:19
【问题描述】:

我对 Spark 有相当多的经验。但是,我是第一次学习 Spark 流,发现它很难理解。很难理解应用程序的流程。例如,对于以下网站上给出的示例

http://ampcamp.berkeley.edu/3/exercises/realtime-processing-with-spark-streaming.html

第 3 部分的代码。进一步的练习,我们有

val words = statuses.flatMap(status => status.split(" "))
val hashtags = words.filter(word => word.startsWith("#"))
val counts = hashtags.map(tag => (tag, 1))
                         .reduceByKeyAndWindow(_ + _, _ - _, Seconds(60 * 5), Seconds(1))

据推测,它会计算过去 5 分钟内最流行的 twitter 哈希标签。那么,这是如何工作的。是否有某种隐藏循环每 5 分钟执行一次? wordshashtags 中的值是每秒还是 5 分钟?这里发生了什么?我迷路了,请帮忙。

【问题讨论】:

    标签: scala hadoop apache-spark streaming bigdata


    【解决方案1】:

    您可以将DStream 视为RDD[RDD[T]]。每五分钟,一个新的RDD 将被实例化,其中包含在最后 5 分钟内收集的所有数据。然后,您将能够像处理任何RDD 一样处理此RDD。您有一些额外的方法可以让您在 windows 上计算结果(每个窗口包含有限数量的RDDs)。当您将转换应用于DStream 时,该转换将应用于所有子RDDs。

    下面是一个将map 应用于DStream 时发生的示例。

    val stream: DStream 
                        \ 
                         RDD -- RDD -- RDD
    stream.map
              \
               RDD.map -- RDD.map -- RDD.map 
    

    【讨论】:

    • 您的意思是可变词和主题标签将包含 5 秒的 DStream,由 subRDD 的 RDD 表示,其中每秒的数据由 subRDD 表示,因此 RDD 将包含大约 5 * 60 = 300子RDD。其次,Spark 在看到使用 reduceByKeyAndWindow 函数分配变量计数的行后决定保留这样的数据。我的理解正确吗?
    • 好吧,让我再看一遍文档,我自己没用过Spark Streaming,只是看了官书里关于streaming的部分有个高层次的了解
    • 您的问题是专门针对reduceByKeyAndByWindow 的吗?如果是这样,我可以为您提供帮助。
    猜你喜欢
    • 2016-09-29
    • 2017-08-08
    • 2018-05-27
    • 2015-12-12
    • 2019-03-23
    • 1970-01-01
    • 2016-01-27
    • 2019-01-20
    • 2020-07-17
    相关资源
    最近更新 更多