StreamingContext会初始化一些内部的关键组件:DstreamGraph/ReceiverTraker/JobGenerator/JobScheduler
DstreamGraph:表示各个Dstream之间的依赖关系。
JobGenerator:根据DstreamGraph定义的算子和各个Dstream之间的依赖关系去生成一个job,job的初始RDD,就是刚创建的batch对应的RDD,然后通过JobScheduler提交job。每隔定义的batch间隔,就会去ReceiverTracker中获取一次时间间隔内的数据信息,然后将数据创建为一个RDD。
JobScheduler:调度job,底层走的逻辑,跟离线job一样。
1. StreamingContext.start()方法调用的时候,就会去Spark集群中的某个worker的Executor上启动输入Dstream的Receiver。
2. Receiver存数据源比如kafka中拉取数据。
3. 拉取的数据首先被保存到它所运行的Executor关联的BlockManager中。
4. 除了保存数据到BlockManager中,还会发送一份数据信息到ReceiverTracker中。