1、Hadoop是什麼
2、storm是什麼
3、Spark Streaming是什麼
4、Spark與storm比較
5、參考文章php
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]html
(1)Hadoop是磁盤級計算,進行計算時,數據在磁盤上,須要讀寫磁盤
(2)Hadoop M/R基於HDFS,須要切分輸入數據、產生中間數據文件、排序、數據壓縮、多份複製等,效率較低。
(3)Hadoop適合處理離線的靜態的大數據;java
舒適提示
(1)延時,指數據從產生到運算產生結果的時間,「快」應該主要指這個。
(2)吞吐,指系統單位時間處理的數據量。python
Storm是一個分佈式的,可靠的,容錯的數據流處理系統。Storm集羣的輸入流由一個被稱做spout的組件管理,spout把數據傳遞給bolt, bolt要麼把數據保存到某種存儲器,要麼把數據傳遞給其它的bolt。一個Storm集羣就是在一連串的bolt之間轉換spout傳過來的數據。數據庫
(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集羣。這讓你能夠快速進行開發和單元測試。apache
(1)須要純實時,不能忍受1秒以上延遲的場景下使用,好比實時金融系統,要求純實時進行金融交易和分析
(2)對於實時計算的功能中,要求可靠的事務機制和可靠性機制,即數據的處理徹底精準,一條也不能多,一條也不能少,也能夠考慮使用Storm
(3)若還須要針對高峯低峯時間段,動態調整實時計算程序的並行度,以最大限度利用集羣資源(一般是在小型公司,集羣資源緊張的狀況),也能夠考慮用Storm
(4)若是一個大數據應用系統,它就是純粹的實時計算,不須要在中間執行SQL交互式查詢、複雜的transformation算子等,那麼用Storm是比較好的選擇編程
Spark Streaming可整合多種輸入數據源,如Kafka、Flume、HDFS,甚至是普通的TCP套接字。經處理後的數據存儲至文件系統、數據庫,或顯示在儀表盤裏。
Spark Streaming的基本原理是將實時輸入數據流以時間片(秒級)爲單位進行拆分,而後經Spark引擎以相似批處理方式處理每一個事件片數據。
Spark Streaming最主要的抽象是DStream(Discretized Stream, 離散化數據流),表示接二連三的數據流。在內部實現上,Spark Streaming的輸入數據按照時間片(如1秒)分紅一段一段,每一段數據轉換爲Spark中的RDD,這些分段就是Dstream,而且對DStream的操做都最終轉變爲對相應的RDD的操做。服務器
(1)Spark沒有提供文件管理系統,因此,它必須和其餘的分佈式文件系統進行集成才能運做,它只是一個計算分析框架,專門用來對分佈式存儲的數據進行計算處理,它自己並不能存儲數據;
(2)Spark可使用Hadoop的HDFS或者其餘雲數據平臺進行數據存儲,可是通常使用HDFS;網絡
(1)不要求純實時,不要求強大可靠的事務機制,不要求動態調整並行度,那麼能夠考慮使用Spark Streaming
(2)考慮使用Spark Streaming最主要的一個因素,應該是針對整個項目進行宏觀的考慮,即:若是一個項目除了實時計算以外,還包括了離線批處理、交互式查詢等業務功能,並且實時計算中,可能還會牽扯到高延遲批處理、交互式查詢等功能,那麼就應該首選Spark生態,用Spark Core開發離線批處理,用Spark SQL開發交互式查詢,用Spark Streaming開發實時計算,三者能夠無縫整合,給系統提供很是高的可擴展性 Spark Streaming與Storm的優劣分析事實上,Spark Streaming絕對談不上比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適合處理在線的實時的大數據。