您的位置:首页 > 运维架构 > 网站架构

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

2017-01-18 11:40 411 查看
//设置batchDuration时间间隔

val ssc =new StreamingContext (conf,Seconds

(5))

 

真正的调度 ssc.start

 

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

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

 

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

 

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

  

 

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

  

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

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

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

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

 

  

容错

1、job级别

2、executor级别接收数据安全性,执行数据安全性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark
相关文章推荐