第3课:通过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶.

来源:互联网 发布:乡村学生教育数据 编辑:程序博客网 时间:2024/05/16 18:42

 

第3课:通过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶.

 

//设置batchDuration时间间隔

val ssc =new StreamingContext (conf,Seconds

(5))

 

真正的调度 ssc.start

 

StreamingContext调用start方法的内部其实是一次启动JobSchedulerstart方法,进入消息循环。

在调用Scheduler内部构造JobGeneratorReceiverTracker,并且调用JobGeneratorReceiverTrackerstart方法。JobGenerator启动后不断根据BatchDuration生成job

 

ReceiverTracker启动后在集群中启动Receiver,首先启动ReceiverSupersivor

 

数据通过ReceiverSupersivor存储到Executor并把数据的Metadata信息发送到DriverReceiverTracker,在ReceiverTracker内部通过ReceiverdBlockTracker来管理接收到的数据

  

 

有了job,有了数据,要产生RDD,怎么表达业务逻辑呢,要依赖于DstreamGraph,线程池复制,提交到cluster

  

每个BatchInterval会产生一个具体的job,其实这里的JOB不是SPARK CORE

中所指的JOB,只是基于DstreamGraph而生成的RDDDAG而已,从JAVA角度,相对于Runnable接口实例,此时想运行job需要提交到JobScheduler,在JobsCheduler中通过单独的线程提交job到集群运行,其实在线程中基于RDDACtion触发作业的运行。为什么使用线程池呢?

1、作业不断生成,提升效率,需要线程池

2、有可能设置的JobFAIR公平调度的方式,也需要多线程的支持

 

  

容错

1job级别

2executor级别接收数据安全性,执行数据安全性

 

0 0