第3课:通过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming

第一部份

课堂的第一部份是用IMF 晚上案例实战课的程序再运行一次,把数据再次输入数据库里面,从图一你可以看出里面有很多运行细节,例如receiver.ReceiverSupervisor,receiver.BlockManager,scheduler. JobScheduler

[图一]







第二部份

课堂的第二部份 主要想说明一个Job其实是怎样生成的,中间有那几个 steps, 我把老师的文字,尝试用一张图去表达[图二]

第3课:通过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming_第1张图片

图二:作业生成运行图


1) 在StreamingContext调用start方法的内部其实是会启动JobScheduler的Start方法, 进行消息循环

2-4) 在JobScheduler的start内部会构造JobGenerator和ReceiverTacker 并且调用JobGenerator和ReceiverTacker的start方法:

5) JobGenerator启动后会不断的根据batchDuration生成一个个的Job

7-8) ReceiverTracker启动后首先在Spark Cluster中Receiver(其实是在Executor中先启动ReceiverSupervisor),在Receiver收到数据后会通过ReceiverSupervisor存储到Executor

9) 并且把数据的Metadata信息发送给Driver中的ReceiverTracker

10) 在ReceiverTracker内部会通过ReceivedBlockTracker来管理接受到的元数据信息


Remarks:

每个BatchInterval会产生一个具体的Job,其实这里的Job不是Spark Core中所指的Job,它只是基于DStreamGraph而生成的RDD的DAG而已,从Java角度讲,相当于Runnable接口实例,此时要想运行Job需要提交给JobScheduler,在JobScheduler中通过线程池的方式找到一个单独的线程来提交Job到集群运行(其实是在线程中基于RDD的Action触发真正的作业的运行),


为什么使用线程池呢?

1,作业不断生成,所以为了提升效率,我们需要线程池;这和在Executor中通过线程池执行Task有异曲同工之妙;

2,有可能设置了Job的FAIR公平调度的方式,这个时候也需要多线程的支持;



Thanks for reading


Janice


——————————————————————————————–——————————————————
Reference: DT大数据梦工厂SPARK版本定制課程 – 第3课:通过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming另类实验及SparkStreaming本质解析


Sharing is Good, Learning is Fun.

業精於勤荒於嬉 行成於思而毀於隨 -- 共勉之


你可能感兴趣的:(第3课:通过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming)