1. 程式人生 > >SparkStreaming部分的學習(包括:sparkStreaming與storm的區別, Sparkstreaming處理資料的過程等)【業務邏輯圖及文字說明】

SparkStreaming部分的學習(包括:sparkStreaming與storm的區別, Sparkstreaming處理資料的過程等)【業務邏輯圖及文字說明】

sparkStreaming與storm的區別:

 Sparkstreaming處理資料的過程:

  1. sparkstreaming:資料是一段時間處理的,是一個微批處理,這個時間是由自己人為設定的。sparkstreaming的吞吐量高。
  2. Storm:是純實時處理資料的,
  3. Storm擅長處理簡單的彙總型業務,sparkstreaming擅長處理複雜的計算型的資料。
  4. Sparkstreaming可以通過控制微批處理的時間,得到一小批資料,可以使用spark core,sparkSQL,擅長處理的是複雜的業務。
  5. Storm 的事務相對比較完善,sparkstreaming也比較完善
  6. Storm支援動態資源排程,spark1.2之後也支援動態排程————————————————————————————————————————————————————

Sparkstreaming是流式處理框架,7*24小時不間斷

Sparkstreaming啟動之後,首先會啟動一個job,來接收資料,假設將5S接收的資料做一次處理,這裡的5S就是我們可以容忍接受的資料的延遲度,這裡的5S也叫作batchInterval。假設batchinterval=5S,圖中,每個5S會將接收來的資料封裝到一個batch中,這個batch又被封裝到一個RDD中,這個RDD又被封裝到一個DStream中。【sparkstreaming底層操作就是dstream,dstream底層就是RDD】。

Dstream有自己的transformation 類運算元,也是懶執行,需要DStream的outputoperator類運算元觸發執行,下一步,每批次生成一個DStream之後,spark會啟動一個job處理資料。

假設batchinterval=5S,每5S生成一批次資料,假設叢集處理完這一批資料需要3S,0-5S一直接受資料,5-8一邊接受資料,一邊處理資料,8-10S只是接受資料,。。。會造成叢集資源不能充分利用。

假設batchinterval=5s,叢集處理完一批資料的時間是8S,0-5S接受資料,5-10S一邊接收資料,一邊處理資料,10-13S一邊接受資料一邊處理資料,。。。如果接收來的資料是存放在記憶體中,就會有OOM記憶體溢位的風險,如果接收來的資料存放在記憶體中或者磁碟中,會有資料溢寫磁碟,處理資料時加大延遲。

————————————————————————————————————————————————————————

Sparkstreaming處理資料:

  1. 需要一個task一直接受資料
  2. 將batchinterval時間段內的資料封裝到一個batch中,batch又被封裝到RDD中,RDD又被封裝到DStream中
  3. DStream有自己的transformations類運算元,懶執行,需要OutputOperator類運算元觸發執行
  4. 如果batchinterval時間大於叢集處理一批次資料的時間,叢集會有空閒,叢集資源不能充分利用
  5. 如果batchinterval時間小於叢集處理一批次資料的時間,會有任務堆積
  6. Sparkstreaming讀取socket端資料

SparkStreaming
        1).SparkStreaming是流式處理框架,7*24小時不間斷執行,微批處理。
        2).與Storm的區別:
            i).Storm是純實時處理資料,SparkStreaming是微批處理資料
            ii).Storm擅長處理彙總型業務,SparkStreaming擅長處理複雜的業務,可以使用SpakrCore,SparkSQL
            iii).Storm可以動態排程資源,SparkStreaming1.2之後可以
            v).Storm事務相對SparkStreaming比較完善
        3).接受處理資料過程:
            要使用一個task接受資料,SparkStreaming將一段時間內的接受來的資料當做一批次處理,這個一段時間就是BatchInterval,
            將接受資料每隔BatchInterval封裝到一個batch中,這個batch又被封裝到一個RDD中,這個RDD又被封裝到一個DStream中。
            每隔batchInterval,就會產生一個DStream,後面要有task處理這個DStream。
            假設產生一批次的時間是5s,叢集處理這批次資料的時間是3s,叢集休息了2s.
            假設產生一批次的時間是5s,叢集處理這批次資料的時間是8s,叢集中就會有任務堆積。
            參照WEBUI看有沒有任務堆積。