spark Streaming简介
spark Streaming是spark想要在流式处理中占据一席之地开发出来的产物,其底层还是使用的spark core,所以spark streaming做不到实时数据处理(毫秒级别),只能做到准实时(秒/分钟级别),且spark的架构如果是一个个的进行处理会导致资源的闲置和浪费,所以采用的是微批次的数据处理(微批次是为了可以准实时的进行处理,如果批量过大,会导致运算时间过长,变成离线处理)。
为了可以实现准实时、微批量,spark streaming使用离散化流(discretized stream)作为抽象表示,叫作 DStream。DStream 是随时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为 RDD 存在, DStream 是由这些 RDD 所组成的序列(因此得名“离散化”),DStream 就是对 RDD 在实时数据处理场景的一种封装
Spark Streaming 支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语如:map、reduce、join、window 等进行运算。DStream支持两种操作,一种是转换操作,会生成一个新的SDtream;一种是输出操作,可以把数据写入到外部系统,如 HDFS,数据库等。
核心类
Spark Streaming的依赖
1 | <dependency> |
StreamingContext是Spark Streaming的主要入口,会从底层创建SparkContext用来处理数据
1 | // 第二个参数用来指定多长时间处理一次新数据的批次间隔 |
调用start方法启动采集器,这样才可以把Spark作业交给SparkContext去调度执行,执行是在另一个线程中执行的,所以需要使用awaitTermination方法来阻塞主线程来等待流计算完成,防止应用退出
1 | // 启动采集器 |