眾所周知,大數據計算的第一代框架Hadoop,是致力於解決離線計算的問題而產生的,在離線批處理上性能優異,但是在實時流處理上,一直被詬病。Hadoop之後,Spark和Storm在流處理上成為對手。今天的大數據入門分享,我們就主要來講講,流處理框架Spark Streaming與Storm。
Apache Spark流處理Spark框架的出現,是在Hadoop MapReduce基礎上繼承研發而來,本質上來說,還是採用的批處理的思想,但是對於數據計算的中間流程做了優化,由此提升了數據處理效率,得到了比原生的MapReduce更優的計算性能。
Spark Streaming是核心Spark API的一個擴展,其流處理思想,是在處理前按時間間隔預先將其切分為一段一段的批處理作業。Spark針對持續性數據流的抽象稱為DStream(DiscretizedStream),一個DStream是一個微批處理(micro-batching)的RDD(彈性分布式數據集);而RDD則是一種分布式數據集,能夠以兩種方式並行運作,分別是任意函數和滑動窗口數據的轉換。雖然目前Spark Streaming已經停止更新,Spark的重點也放到了Structured Streaming,但由於Spark版本過低或者其他技術選型問題,可能還是會選擇Spark Streaming。Spark Streaming在企業級平臺當中的應用,還是不少。Apache Storm流處理Storm作為分布式實時大數據處理系統,可以是首次實現了真正意義上的流處理。Storm具有高可靠、高容錯、高擴展的特點,有很高的數據吞吐能力,Storm本身是無狀態的,通過ZooKeeper管理分布式集群環境和集群狀態。
Storm側重於低延遲的流處理,以近實時方式處理源源不斷的流數據。Storm的基本思想是使用spout拉取stream(數據),並使用bolt進行處理和輸出,Storm數據處理延時可以達到亞秒級。在Storm中,先要設計一個用於實時計算的圖狀結構,我們稱之為拓撲(topology)。這個拓撲將會被提交給集群,由集群中的主控節點(master node)分發代碼,將任務分配給工作節點(worker node)執行。一個拓撲中包括spout和bolt兩種角色,其中spout發送消息,負責將數據流以tuple元組的形式發送出去;而bolt則負責轉換這些數據流,在bolt中可以完成計算、過濾等操作,bolt自身也可以隨機將數據發送給其他bolt。由spout發射出的tuple是不可變數組,對應著固定的鍵值對。Storm與Spark streaming的應用場景Storm:Storm需要純實時的環境,不能忍受1秒以上的延遲環境,比如銀行類的金融系統。如果在實時計算中要保證事務性的話,同樣還是銀行,數據要非常精準,需要最大限度利用集群資源,也可以考慮Storm。Spark streaming:不要求純實時,不要求強大可靠的事務機制,不要求動態調整並行度,那麼可以考慮使用Spark Streaming。考慮使用Spark Streaming最主要的一個因素,應該要針對整個項目進行宏觀的考慮,如果一個項目除了實時計算之外,還包括了其他業務功能.就要考慮使用Sparkstreaming。關於大數據流處理框架Spark Streaming與Storm,以上就為大家做了簡單的介紹了。在流處理領域,目前來說,Storm的市場份額不大,主流更多集中在Spark和Flink上,但是相應的了解還是有必要的。