• 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

  • 相关阅读:
    cocos2d-x CSV文件读取 (Excel生成csv文件)
    cocos2d-x 中 xml 文件读取
    String 类的实现
    json 文件解析与应用
    设计模式 之 《简单工厂模式》
    C++ 0X 新特性实例(比较常用的) (转)
    CCSpriteBatchNode CCSpriteFrameCache
    LongAdder
    ConcurrentHashMap源码
    HashMap源码
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5492538.html
Copyright © 2020-2023  润新知