#Spark Streaming
before spark 2.0
DStream
-
kafka
-
描述
- 相同类型的一组RDD,代表连续的数据流
- 可以由实时数据流创建,TCP sockets , kafka ,flume ,现有DStreams转换操作,
- 该类提供了基础的map,fliter,widow,PairDStreamFunction ==>join,groupByKeyAndWindow
- batchInterval=> batchDuration,执行任务的周期,包含一个或者多个block
- blockInterval => receiver接收到数据后创建block的周期
- 一个DStream关联一个receiver,需要从多个Receiver并行读取需要创建多个DStream,一个Receiver运行载一个Executor,占用1个cpu
- 来自数据源的数据接收到以后,receiver会每隔blockInterval时间生成block
- batchInterval 间隔的block被创建成RDD,block数就是RDD的分区数,分区数对应task数, blockInterval== batchinterval 意味着只有一个分区,本地执行
-
子类
- InputDStream
- 描述
- 所有输入流的基类
- spark stream 系统会调用 start 和stop来开始或者停止接受数据,比InputStream多这两个接口
- 只需要在driver上生成RDD的,可以继承InputDStream通过一个线程在driver节点生成RDD.
- 例如:FileInputDStream => 监控 HDFS目录生成的新文件
- 需要在worker节点上接收数据的,需要继承ReceiverInputDStream
- 子类
- ReceiverInputDStream
- 描述
- 在worker节点启动receiver接收外部数据
- 新增getReceiver接口,用以worker 节点获取receiver
- 子类
- SocketInputDStream
- 描述
- DirectKafkaInputDStream
- ReceiverInputDStream
- 描述
- InputDStream
-
缺点
- 需要transfer
##DStreamGraph
##JobGenerator
- batchDuration 生成一次执行任务事件
##StreamingContext
- batchDuration
- 任务周期间隔
##Receiver
- 在worker节点获取数据的对象
- ReceiverSupervisor
- ReceiverSupervisorImpl
- pushSingle 将接收到的数据添加数据到BlockGenerator的buffer
- pushAndReportBlock
- 通过blockManager存储block
- 通知更新blockInfo
- ReceiverSupervisorImpl
- ReceiverTracker
- ReceiverTrackerEndpoint
- JobScheduler
- BlockGenerator
- RateLimiter
- waitToPush
- 限制一次处理一个消息,消息处理时新来的消息被block
- com.google.common.util.concurrent.RateLimiter
- 每秒处理多少任务量
- 批处理时候每秒多少大小一批
- waitToPush
- 启动2个线程,一个线程负责把receiver中获取的数据分批,另一个线程负责把这些分批好的块push到block manager
- spark.streaming.blockInterval
- buffer刷新block时间默认200ms
- RateLimiter
- ReceiverSupervisor
本文深入探讨了Spark Streaming中DStream的概念与应用,包括其在2.0版本前的特性,如与Kafka的集成,以及DStream的子类如InputDStream、ReceiverInputDStream等的工作原理。同时,解析了DStream的执行机制,如batchInterval和blockInterval的作用,以及Receiver如何在worker节点上接收数据。
7337

被折叠的 条评论
为什么被折叠?



