spark 的方式

mcxiaoracle發表於2022-07-20
  • sparkStreaming簡介
  • spark Streaming和Storm區別
  • Spark Streaming運算元
  • Spark checkpointing

  • Spark和kafka整合



  • SparkStreaming是一種流式處理框架,是SparkAPI的擴充套件,支援可擴充套件、高吞吐、容錯的 準實時資料處理,實時資料的來源可以事:
    • Kafka、Flume、Twitter,zeroMQ或者TCP sockets;
  • 並且可以使用高階功能的複雜運算元來處理流資料,例如:map,reduce,jion,window;最終處理後的資料可以來存放在檔案系統,資料庫,方便實時展現;


  • Storm是純實時的流式處理框架,SparkStreaming是準實時的處理框架(微批處理);因為微批處理,SparkStreaming的吞吐量比Storm要高;
  • Storm的事務機制要比SparkStreaming的要完善;
  • Storm支援的動態資源排程(Spark1.2及以後也支援)
  • SparkStreaming擅長複雜的業務處理,Storm不擅長複雜的業務處理,擅長簡單的彙總計算

Spark的各個子框架,都基於核心Spark的,SparkStreaming在內部的機制如下:SparkStreaming接收到實時input資料流,並將資料分批成batch,然後由Spark Engine進行處理最後生成batch的輸出結果流

任何作用於DStream的運算元,其實都會被轉化為對其內部RDD的操作。例如,我們將 lines 這個DStream轉成words DStream物件,其實作用於lines上的flatMap運算元,會施加於lines中的每個RDD上,並生成新的對應的RDD,而這些新生成的RDD物件就組成了words這個DStream物件。其過程如下圖所示


  • 基礎資料來源:在StreamingContext API中可以直接使用源:如檔案系統,套接字連線或者Akka actor
  • 高階資料來源:需要依賴額外工具類的源,如:Kafka、Flume;


因為SparkStream是7*24小時執行的,Driver只是一個簡單的程式,有可能掛掉,所以實現Driver的HA就又必要(如果使用Client模式就無法實現DriverHA)Yarn平臺cluster模式提交任務,AM(AplicationMaster)相當於Driver,如果掛掉會自動啟動AM。這裡所說的DriverHA針對的是Spark standalone和Mesos資源排程的情況下。實現Driver的高可用有兩個步驟:


  • receiver模式採用了Receiver接收器模式,需要一個執行緒一直接受資料,將資料接收到Executor中,預設儲存級別是MEMORY_AND_DISK_SER_2
  • receiver模式自動使用zookeeper管理消費者offset
  • receiver模式底層讀取kafka採用High Level Consumer API實現,這種模式不關心offset,只要資料;
  • receiver模式當Driver掛掉時有資料丟失問題,可以開啟WAL機制,避免丟失資料,但是開啟後加大資料延遲,並存在資料重複消費等風險;
  • receiver模式並行度由spark.stream.blockInterbal=200ms,可以減少這個引數增大並行度,最小不能低於50ms;
  • Receiver模式不被使用
    • 被動將資料接受到Executor,當有任務堆積實,資料存在問題
    • 這種模式不能手動維護消費者offset







推薦閱讀:












來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949806/viewspace-2906587/,如需轉載,請註明出處,否則將追究法律責任。

相關文章