首页 > 其他 > 详细

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

时间:2016-06-06 23:37:22      阅读:427      评论:0      收藏:0      [点我收藏+]

本期内容 :

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

 

 

  备注:

    • 资料来源于:王家林(Spark发行版本定制)
    • 新浪微博:http://www.weibo.com/ilovepains

 

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

原文:http://www.cnblogs.com/yinpin2011/p/5565047.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!