Spark发行笔记7 SparkStreaming JobScheduler

感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制。

本期概览:

1 SparkStreaming JobScheduler深入解析

 2 SparkStreaming JobScheduler源码解析

话不多说,先上图,感谢IMF成员提供图片技术支持,图片如下图所示:


JobScheduler的地位非常的重要,所有的关键都在JobScheduler,它的重要性就相当于是Spark Core当中的DAGScheduler,因此,我们要花重点在JobScheduler上面。

以如下代码为例

我们先进入foreachRDD方法源码中,如下图所示


额外再次说明:DStream是逻辑级别的,RDD是物理级别的。正如DStream是空间维度的层面,空间维度加上时间构成时空维度。

更简单形象的理解可以这样理解:比如你有一个计划,计划是那个空间维度,随着时间的推移,你的计划一步一步的实现,从而慢慢形成空间维度。而DStream是那个空间维度,RDD则是那个时空维度。

分析foreachRDD源码可知:遍历RDD,这些RDD构成了依赖关系。再次强调:DStream是逻辑级别的,RDD是物理级别的。



补充说明:下图中StreamingContext类中的如下线程的创建是和conf.setMaster[6]指定的6个线程是完全没有关系的,下图的线程是从调度层面去创建的,如下图:


总结:当自己写spark代码的时候,可以复用spark官方的工具类ThreadUtils,所以所阅读熟悉ThreadUtils的内部工具方法,对于重写spark源代码和二次开发,甚至做spark的发行版的时候,可以借鉴ThreadUtils的重写和复用。


紧接着:实例化ReceiverTracker和EventLoop(注释说这里的俩个对象是scherduler.start()方法执行之后才创建的)

这里说明任务调度和作业执行分开,代码可维护行很好

总结:我们发现,真正的Job的产生是通过DStream通过new ForeachDStream产生ForeachDStream对象,然后调用对象的generateJob产生,然后再通过jobGenerator调用Job物化,

(DStream子类中,只有ForEachDStream重写了generateJobs)

job生成5大步骤,经典的如下图所示


job提交过程,注意服务器时间不能改,改的话,时间维度混乱了,但是spark有相应的机制


此处可以改变streaming的并发度,这也是一个性能调优的技巧。

spark.streaming.concurrentJobs,可以用在同时多个Job并发运行,多个输出。或者说不同的batch,要并行运行的话,也可以通过spark.streaming.concurrentJobs并发运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值