Spark流和Dstream如何工作?

时间:2015-08-17 22:32:11

标签: scala hadoop apache-spark streaming bigdata

我对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分钟内最受欢迎的推特哈希标签。那么,这是如何工作的。是否有某种隐藏的循环在每5分钟后执行一次?每秒或5分钟后,wordshashtags中的值是?这里发生了什么?我迷路了,请帮帮忙。

1 个答案:

答案 0 :(得分:1)

您可以将DStream视为RDD[RDD[T]]。每隔五分钟,将使用在过去5分钟内收集的所有数据来实例化新的RDD。然后,您就可以像处理任何RDD一样处理此RDD。您有一些其他方法可以让您通过 windows 计算结果(每个窗口包含有限数量的RDD s)。将转换应用于DStream时,转换将应用于所有子RDD

以下是将map应用于DStream时会发生什么的示例。

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