zoukankan      html  css  js  c++  java
  • 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 所有接收的数据都会被处理完成,才会停止。

  • 相关阅读:
    解决:只有 DBA 才能导入由其他 DBA 导出的文件
    查找—顺序查找
    软件测试,想说爱你不容易
    Oracle常用SQL
    排序—直接插入排序
    排序—归并排序
    排序—快速排序
    排序—选择排序
    查找—折半查找
    排序—堆排序
  • 原文地址:https://www.cnblogs.com/yinpin2011/p/5565047.html
Copyright © 2011-2022 走看看