Spark Streaming揭秘 Day6

关于SparkStreaming Job的一些思考

Job是SparkStreaming的重要基础,今天让我们深入,进行一些思考。

Job是什么?

首先,有个挺重要的概念要区分下,就是SparkStreaming中的Job和Spark core的Job并不相同,可以认为SparkStreaming中的Job是一个应用程序,不同于Spark core中的Job。

从Job的的定义来看,类似于一个Java Bean,核心是其run方法,相当于Java中线程要处理的Runnable逻辑的封装。

Job从何而来?

Job是基于DStreams生成,更准确的说,基于DStreams的依赖关系graph来产生Jobs。

DStream有三种类型,包括InputDstreams、OutputDStreams(逻辑级别的action,会封装Spark的action)、TransformationDStreams(中间转换逻辑),后面的DStreams对前面的有依赖。

从下面的代码中,我们可以看出Job主要是基于outputStreams来生成。

Job触发方式?

在Spark Streaming中以时间方式触发Job,主要采用定时方式生成,也包涵其他方式(比如状态操作state对很多Batch Duration做汇总处理)。

其核心是通过一个timer来实现定时调用

而timer是通过callback方法,来调用我们的Job生成过程,和应用程序进行衔接。

Job的生成过程

下面这段是Job生成最为关键的代码:

在这段代码中包涵了Job的生成和提交的完整过程:
包含几个步骤:
1.获取当前时间段的数据,通过receiverTracker
2.根据Dstream graph生成Job
3.生成Input信息
4.把生成的Job交给jobScheduler运行
5.进行checkpoint

最终会调用JobHandler中的run方法来运行

小结

用如下的流程图来将上述内容进行一下串联。

通过如上的分析,我们可以知道Job是逻辑级别的,对RDD的物化。在Streaming代码中,操作会被翻译成RDD的操作,但是被封装在函数体里,仅仅在执行时才拿出来调用。实际是由底层RDD的action来触发的(所以才有机会调度和优化)。

而对于传统的批处理方式来说,可以认为仅仅是流式处理的一种特例,可以说,SparkStreaming提供了一种更为通用的大数据解决方案。

欲知后事如何,且听下回分解

DT大数据每天晚上20:00YY频道现场授课频道68917580

最新文章

  1. Git : SSH 协议服务器
  2. .NET LINQ基本查询操作
  3. 转-Apache的Order Allow,Deny 详解
  4. <select>的下拉样式
  5. 什么是 jsonp ?
  6. Codeforce Round #216 Div2
  7. centos 6.5安装vncserver 并开启远程桌面
  8. [Effective C++ --020]宁以pass-by-reference-to-const替换pass-by-value
  9. c语言exit和return区别,在fork和vfork中使用
  10. oracle服务器和客户端字符集的查看和修改
  11. windows时间函数
  12. oracle之sql语句优化
  13. Jenkins 登录信息无效。请重试。
  14. Arduino语言介绍
  15. Python中类的定义及使用
  16. 【XSY2535】整数 NTT
  17. 2018牛客网暑期ACM多校训练营(第二场)J Farm(树状数组)
  18. JS/Jquery版本的俄罗斯方块(附源码分析)
  19. python------面向对象介绍之多态实例
  20. SpringBoot application.properties (application.yml)优先级从高到低

热门文章

  1. java_小技巧
  2. BUG: GetDC() ReleaseDC()引起的内存泄漏
  3. windows进程的创建方法
  4. Hibernate的几种主键生成策略
  5. Windows环境下安装导入tornado
  6. [改善Java代码]枚举项的数量限制在64个以内
  7. 获取登录的IP或者信息
  8. SQL数据库设计三范式
  9. EF查询生成的SQL
  10. C#抽象工厂简单实现类