Spark Streaming中空RDD處理及流處理程序優雅的中止

本期內容 :數據庫

  • Spark Streaming中的空RDD處理
  • Spark Streaming程序的中止

  

  因爲Spark Streaming的每一個BatchDuration都會不斷的產生RDD,空RDD有很大機率的,如何進行處理將影響其運行的效率、資源的有效使用。spa

  Spark Streaming會不斷的接收數據,在不清楚接收的數據處理到什麼狀態,若是你強制中止掉的話,會涉及到數據不完整操做或者一致性相關問題。blog

 

1、 Spark Streaming中的空RDD處理 :資源

  ForEachRDD是產生Dstreams真正的Action操做的核心的方法(算子)。it

  

  

  數據寫入數據庫期間,當RDD爲空時,若是也進行ForEachPartition及寫數據庫操做,或者數據保存在HDFS上等操做,此時雖然並無作什麼事情,也須要獲取計算資源。io

  

  如何最大化的節約資源與提升效率呢?在處理以前增長判斷:效率

  

  都是上面對數據進行判斷的方法仍是不夠理想,由於count操做會啓動Job進行操做,仍是會浪費資源,咱們進行梳理如下方法:stream

  

  若是在有若干個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做業將沒法執行。

 

2、 Spark Streaming程序的中止 :

  通常狀況下Spark Streaming是採用什麼方式中止呢?

  

   

  

  

  以上的中止方式會把這個Streams中止掉,可是不會等待全部的數據處理完成默認狀況下SparkContext也會被中止掉。

  

  使用StopGraceFully方式處理 :

  

  

  

  應用程序啓動的時候會調用 StopOnShutdown ,會把回調傳進去。

  

  若是提示數據沒有處理完成就被中止掉了:

  

  總結:使用 StopGraceFully 全部接收的數據都會被處理完成,纔會中止。

相關文章
相關標籤/搜索