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

本文深入剖析了SparkStreaming的工作机制,包括作业生成过程、消息循环、任务调度等关键环节,详细介绍了SparkStreaming中Job的生成与运行机制,以及如何在Spark集群中高效地处理实时数据流。

第一部份

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

[图一]







第二部份

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

212112_faFo_2758037.png

图二:作业生成运行图


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.

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


转载于:https://my.oschina.net/jcchoiling/blog/672457

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值