Hadoop、storm和Spark Streaming簡單介紹(非原創)

文章大綱

一、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適合處理在線的實時的大數據。

五、參考文章

    1. https://blog.csdn.net/qq_33314107/article/details/80904262
    2. https://blog.csdn.net/zxc123e/article/details/81289147
    3. https://blog.csdn.net/wx1528159409/article/details/86612211
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章