SparkStreaming 是流式处理框架,是 Spark API 的扩展,支持可扩展、高 吞吐量、容错的实时数据流处理,实时数据的来源可以是:Kafka, Flume, Twitter, ZeroMQ 或者 TCP sockets,并且可以使用高级功能的复杂算子来 处理流数据。例如:map,reduce,join,window 。最终,处理后的数据可以 存放在文件系统,数据库等,方便实时展现
SparkStreaming 理解
注意:
receiver task 是 7*24 小时一直在执行,一直接受数据,将一段 时间内接收来的数据保存到 batch 中。假设 batchInterval 为 5s,那么 会将接收来的数据每隔 5 秒封装到一个 batch 中,batch 没有分布式计 算特性,这一个 batch 的数据又被封装到一个 RDD 中,RDD 最终封装 到一个 DStream 中。
例如:假设 batchInterval 为 5 秒,每隔 5 秒通过 SparkStreaming 将 得到一个 DStream,在第 6 秒的时候计算这 5 秒的数据,假设执行任务 的时间是 3 秒,那么第 6~9 秒一边在接收数据,一边在计算任务,9~10 秒只是在接收数据。然后在第 11 秒的时候重复上面的操作。
如果 job 执行的时间大于 batchInterval 会有什么样的问题?
如果接受过来的数据设置的级别是仅内存,接收来的数据会越堆积越多, 最后可能会导致 OOM(如果设置 StorageLevel 包含 disk, 则内存存放 不下的数据会溢写至 disk, 加大延迟 )。