天天看点

PySpark 学习笔记六

6 Structured Streaming

6.1 What is Spark Streaming?

Spark Streaming的核心是一个可扩展的容错流系统,它采用RDD批处理模式(即批量处理数据)并加快速度。

如下图所示,Spark Streaming接收输入数据流,并在内部将该数据流分成多个较小的批次(其大小基于批处理间隔)。 Spark引擎将这些批量的输入数据处理成批量的结果集。

PySpark 学习笔记六

Spark Streaming的关键抽象是Discreteized Stream(DStream),它代表了前面提到的构成数据流的小批量。

DStreams建立在RDD之上,允许Spark开发人员在RDD和批处理的相同环境中工作,现在只可应用于流问题。另外一个重要的方面是,由于使用Apache Spark,Spark Streaming集成了MLlib, SQL,DataFrames和GraphX。

下面的图描述了Spark Streaming的基本组件:

PySpark 学习笔记六

Spark Streaming是一个高级API,为有状态操作提供了一次性的容错。 Spark Streaming内置了接收器,可以承担很多来源,最常见的是Apache Kafka,Flume,HDFS /S3,Kinesis和Twitter。

6.2 Why do we need Spark Streaming?

大规模的实时开发可操作能力为企业提供了竞争优势。无论是在检测欺诈性交易,提供传感器异常实时检测,还是对下一个病毒式推特做出反应,流数据分析在数据科学家和数据工程师的工具箱中变得越来越重要。 Spark Streaming能够以准实时的方式容易地实现较为复杂的统计需求。

Spark Streaming有四个广泛的用例:

  • Streaming ETL:数据在被推入下游之前不断被清理和汇总。这通常是为了减少最终数据存储中的数据量。
  • Triggers::实时检测异常行为或事件触发器下游行动。
  • Data enrichment:加入其他数据集的实时数据可以进行更丰富的分析。例如,包括实时天气信息和航班信息,以建立更好的旅游警报。
  • Complex sessions and continuous learning:利用多组与实时流相关的数据不断地分析或更新机器学习模型。例如,与在线游戏关联的用户活动流,使我们能够更好地细分用户。

6.3 What is the Spark Streaming application data flow?

下图提供了Spark的driver,workers,流源和目标之间的数据流:

PySpark 学习笔记六

这一切都以Spark Streaming Context开始,由上图中的ssc.start()表示:

  1. 当Spark Streaming Context启动时,driver将分配给executor(即workers )一个长期任务。
  2. Executor(本图中的Executor1)上的接收者从流式源接收数据流。随着输入的数据流,接收器将流分成块并将这些块保存在内存中。
  3. 这些数据块也被复制到另一个Executor,以避免数据丢失。
  4. 数据块的 ID 信息 被传送到 driver 中的 Block Management Master上。
  5. 对于Spark Streaming Context中配置的每个批处理间隔(通常这是每1秒),driver将启动Spark任务处理块。然后将这些块保存到任意数量的目标数据存储中,包括云存储(例如S3/WASB等),关系数据存储(例如MySQL,PostgreSQL等),以及NoSQL存储。