文章大綱
一、Hadoop是什么
二、storm是什么
三、Spark Streaming是什么
四、Spark與storm比較
五、參考文章

一、Hadoop是什么
1. 簡介
Hadoop是一個由Apache基金會所開發的分布式系統基礎架構。
用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力進行高速運算和存儲。
[1] Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。
Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數據提供了存儲,而MapReduce則為海量的數據提供了計算。 [2]
2. 特點
(1)Hadoop是磁盤級計算,進行計算時,數據在磁盤上,需要讀寫磁盤
(2)Hadoop M/R基於HDFS,需要切分輸入數據、產生中間數據文件、排序、數據壓縮、多份復制等,效率較低。
(3)Hadoop適合處理離線的靜態的大數據;
溫馨提示
(1)延時,指數據從產生到運算產生結果的時間,“快”應該主要指這個。
(2)吞吐,指系統單位時間處理的數據量。
二、storm是什么
1. 簡介
Storm是一個分布式的,可靠的,容錯的數據流處理系統。Storm集群的輸入流由一個被稱作spout的組件管理,spout把數據傳遞給bolt, bolt要么把數據保存到某種存儲器,要么把數據傳遞給其它的bolt。一個Storm集群就是在一連串的bolt之間轉換spout傳過來的數據。
2. 特點
(1)Storm是內存級計算,數據直接通過網絡導入內存。讀寫內存比讀寫磁盤速度快n個數量級
(2)Storm 基於ZeroMQ這個高性能的消息通訊庫,不持久化數據。
(3)簡單的編程模型。類似於MapReduce降低了並行批處理復雜性,Storm降低了進行實時處理的復雜性。
(4)可以使用各種編程語言。你可以在Storm之上使用各種編程語言。默認支持Clojure、Java、Ruby和Python。要增加對其他語言的支持,只需實現一個簡單的Storm通信協議即可。
(5)容錯性。Storm會管理工作進程和節點的故障。
(6)水平擴展。計算是在多個線程、進程和服務器之間並行進行的。
(7)可靠的消息處理。Storm保證每個消息至少能得到一次完整處理。任務失敗時,它會負責從消息源重試消息。
(8)快速。系統的設計保證了消息能得到快速的處理,使用MQ作為其底層消息隊列。
(9)本地模式。Storm有一個“本地模式”,可以在處理過程中完全模擬Storm集群。這讓你可以快速進行開發和單元測試。
3. 適用Storm的場景
(1)需要純實時,不能忍受1秒以上延遲的場景下使用,比如實時金融系統,要求純實時進行金融交易和分析
(2)對於實時計算的功能中,要求可靠的事務機制和可靠性機制,即數據的處理完全精准,一條也不能多,一條也不能少,也可以考慮使用Storm
(3)若還需要針對高峰低峰時間段,動態調整實時計算程序的並行度,以最大限度利用集群資源(通常是在小型公司,集群資源緊張的情況),也可以考慮用Storm
(4)如果一個大數據應用系統,它就是純粹的實時計算,不需要在中間執行SQL交互式查詢、復雜的transformation算子等,那么用Storm是比較好的選擇
三、Spark Streaming是什么
1. 簡介
Spark Streaming可整合多種輸入數據源,如Kafka、Flume、HDFS,甚至是普通的TCP套接字。經處理后的數據存儲至文件系統、數據庫,或顯示在儀表盤里。
Spark Streaming的基本原理是將實時輸入數據流以時間片(秒級)為單位進行拆分,然后經Spark引擎以類似批處理方式處理每個事件片數據。
Spark Streaming最主要的抽象是DStream(Discretized Stream, 離散化數據流),表示連續不斷的數據流。在內部實現上,Spark Streaming的輸入數據按照時間片(如1秒)分成一段一段,每一段數據轉換為Spark中的RDD,這些分段就是Dstream,並且對DStream的操作都最終轉變為對相應的RDD的操作。
2. 特點
(1)Spark沒有提供文件管理系統,所以,它必須和其他的分布式文件系統進行集成才能運作,它只是一個計算分析框架,專門用來對分布式存儲的數據進行計算處理,它本身並不能存儲數據;
(2)Spark可以使用Hadoop的HDFS或者其他雲數據平台進行數據存儲,但是一般使用HDFS;
3. Spark Streaming適用場景
(1)不要求純實時,不要求強大可靠的事務機制,不要求動態調整並行度,那么可以考慮使用Spark Streaming
(2)考慮使用Spark Streaming最主要的一個因素,應該是針對整個項目進行宏觀的考慮,即:如果一個項目除了實時計算之外,還包括了離線批處理、交互式查詢等業務功能,而且實時計算中,可能還會牽扯到高延遲批處理、交互式查詢等功能,那么就應該首選Spark生態,用Spark Core開發離線批處理,用Spark SQL開發交互式查詢,用Spark Streaming開發實時計算,三者可以無縫整合,給系統提供非常高的可擴展性 Spark Streaming與Storm的優劣分析事實上,Spark Streaming絕對談不上比Storm優秀。
四、Spark與storm比較

總結
總之,這兩個框架在實時計算領域都很優秀,只是擅長的細分場景並不相同。Spark Streaming僅僅在吞吐量上比Storm要優秀,而吞吐量這一點,也是歷來挺Spark Streaming貶Storm的人着重強調的。但是問題是,是不是在所有的實時計算場景下,都那么注重吞吐量?不盡然。因此,通過吞吐量說Spark Streaming強於Storm,不靠譜。事實上,Storm在實時延遲度上,比Spark Streaming就好多了,前者是純實時,后者是准實時。而且,Storm的事務機制、健壯性 / 容錯性、動態調整並行度等特性,都要比Spark Streaming更加優秀。Spark Streaming,有一點是Storm絕對比不上的,就是:它位於Spark生態技術棧中,因此Spark Streaming可以和Spark Core、Spark SQL無縫整合,也就意味着,我們可以對實時處理出來的中間數據,立即在程序中無縫進行延遲批處理、交互式查詢等操作。這個特點大大增強了Spark Streaming的優勢和功能。
Hadoop適合處理離線的靜態的大數據;
Spark適合處理離線的流式的大數據;
Storm適合處理在線的實時的大數據。