解密SparkStreaming运行机制和架构进阶之Job和容错

本博文主要包括以下内容:

  • 解密Spark Streaming Job架构和运行机制
  • 解密Spark Streaming容错架构和运行机制

一、解密SparkStreaming Job架构和运行机制:

理解SparkStreaming的Job的整个架构和运行机制对于精通SparkStreaming是至关重要的。我们知道对于一般的Spark应用程序来说,是RDD的action操作触发了Job的运行。那对于SparkStreaming来说,Job是怎么样运行的呢?我们在编写SparkStreaming程序的时候,设置了BatchDuration,Job每隔BatchDuration时间会自动触发,这个功能肯定是SparkStreaming框架提供了一个定时器,时间一到就将编写的程序提交给Spark,并以Spark job的方式运行。

这里面涉及到两个Job的概念:

这里写图片描述

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

  • 作业不断生成,所以为了提升效率,我们需要线程池;这和在Executor中通过线程池执行Task有异曲同工之妙;
  • 有可能设置了Job的FAIR公平调度的方式,这个时候也需要多线程的支持;
    上面提交的Spark Job本身。单从这个时刻来看,此次的Job和Spark core中的Job没有任何的区别。

下面我们看看job运行的过程:
1.首先实例化SparkConf,设置运行期参数。

val conf = new SparkConf().setAppName("--")

2.实例化StreamingContext,设置batchDuration时间间隔来控制Job生成的频率并且创建Spark Streaming执行的入口。

val ssc = new StreamingContext(conf,Seconds(20))

3,StreamingContext.scala的第183行

private[streaming] val scheduler = new JobScheduler(this)

4,JobScheduler.scala的第50行

private val jobGenerator = new JobGenerator(this)

5,StreamingContext调用start方法。

def start(): Unit = synchronized {
  state match {
    c
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值