• Spark Streaming中空RDD处理及流处理程序优雅的停止


    本期内容 :

    • Spark Streaming中的空RDD处理
    • Spark Streaming程序的停止

      

      由于Spark Streaming的每个BatchDuration都会不断的产生RDD,空RDD有很大概率的,如何进行处理将影响其运行的效率、资源的有效使用。

      Spark Streaming会不断的接收数据,在不清楚接收的数据处理到什么状态,如果你强制停止掉的话,会涉及到数据不完整操作或者一致性相关问题。

    一、 Spark Streaming中的空RDD处理 :

      ForEachRDD是产生Dstreams真正的Action操作的核心的方法(算子)。

      

      

      数据写入数据库期间,当RDD为空时,如果也进行ForEachPartition及写数据库操作,或者数据保存在HDFS上等操作,此时虽然并没有做什么事情,也需要获取计算资源。

      

      如何最大化的节约资源与提高效率呢?在处理之前增加判断:

      

      都是上面对数据进行判断的方法还是不够理想,因为count操作会启动Job进行操作,还是会浪费资源,我们进行梳理以下方法:

      

      如果在有若干个Partitions ,但是Partition的内容是空的话,take就可能启动Job :

      

      假如没有数据的情况下会如何处理 :

      

      

      

      数据为空时的操作 :

      

      

      从上面可以观察到,会生成RDD ,但是RDD里面没有Partition ,没有数据的时候不会生成Block ,但是会生成RDD,不过里面一个Partition都没有而已。

      

      有Partition但是如果没有BlockID也是不会执行的 :

      

      

      总结:

      其实也可以不生成RDD ,是因为需要维持一个概念,每个BachDuration都会产生一个Job,Job如果没有RDD的话就无法产生;

      在每个时间间隔都会产生Job,如果提交的时候都没有Job,你的Action作用于什么呢,从表面上看不产生RDD有效率;

      但是在调度层面的依赖是每个BatchDuration产生的Job,调度层面要判断是否有RDD,没有RDD作业将无法执行。

    二、 Spark Streaming程序的停止 :

      一般情况下Spark Streaming是采用什么方式停止呢?

      

       

      

      

      以上的停止方式会把这个Streams停止掉,但是不会等待所有的数据处理完成默认情况下SparkContext也会被停止掉。

      

      使用StopGraceFully方式处理 :

      

      

      

      应用程序启动的时候会调用 StopOnShutdown ,会把回调传进去。

      

      如果提示数据没有处理完成就被停止掉了:

      

      总结:使用 StopGraceFully 所有接收的数据都会被处理完成,才会停止。

  • 相关阅读:
    Quartz入门例子简介 从入门到菜鸟(一)
    初识Quartz之第一个Quartz实例
    @DisallowConcurrentExecution 注解的作用 【定时器执行完当前任务才开启下一个线程的方式】
    no identities are available for signing
    Unity3D研究院之在把代码混淆过的游戏返混淆回来
    安沃广告问题
    IOS 接ShareSDK问题
    网页中插入Flvplayer视频播放器代码
    unity Android 打包后读取 xml 文件
    unity3d 下操作excel 与打印
  • 原文地址:https://www.cnblogs.com/yinpin2011/p/5565047.html
Copyright © 2020-2023  润新知