zoukankan      html  css  js  c++  java
  • Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考

    Spark Streaming揭秘 Day6

    关于SparkStreaming Job的一些思考

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

    Job是什么?

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

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

    Job从何而来?

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

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

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

    Job触发方式?

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

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

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

    Job的生成过程

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

    Snip20160514_5

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

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

    Snip20160514_6

    小结

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

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

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

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

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

  • 相关阅读:
    Theano入门笔记1:Theano中的Graph Structure
    [译博文]CUDA是什么
    一天一经典Efficient Estimation of Word Representations in Vector Space
    Generating a Random Sample from discrete probability distribution
    关于representation的理解
    git代码管理——克隆项目到本地仓库及上传本地项目到仓库
    yum管理——linux字符界面安装图形化及两种界面的切换(3)
    yum管理——yum常用配置(2)
    yum管理——搭建iso镜像私有yum源仓库(1)
    apche编译安装
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5492538.html
Copyright © 2011-2022 走看看