掃盲!爲何說 Storm 比 Hadoop 快?

storm的網絡直傳、內存計算,其時延必然比hadoop的經過hdfs傳輸低得多;當計算模型比較適合流式時,storm的流式處理,省去了批處理的收集數據的時間;由於storm是服務型的做業,也省去了做業調度的時延。因此從時延上來看,storm要快於hadoop。面試

 

 

 

 

爲何說 Storm 比 Hadoop 快?數據庫

「快」這個詞是不明確的,專業屬於點有兩個層面:1.時延 , 指數據從產生到運算產生結果的時間,題主的「快」應該主要指這個。2. 吞吐, 指系統單位時間處理的數據量。網絡

首先明確一點,在消耗資源相同的狀況下,通常來講storm的延時低於mapreduce。可是吞吐也低於mapreduce。storm的網絡直傳、內存計算,其時延必然比hadoop的經過hdfs傳輸低得多;當計算模型比較適合流式時,storm的流式處理,省去了批處理的收集數據的時間;由於storm是服務型的做業,也省去了做業調度的時延。因此從時延上來看,storm要快於hadoop。說一個典型的場景,幾千個日誌生產方產生日誌文件,須要進行一些ETL操做存入一個數據庫。分佈式

假設利用hadoop,則須要先存入hdfs,按每一分鐘切一個文件的粒度來算(這個粒度已經極端的細了,再小的話hdfs上會一堆小文件),hadoop開始計算時,1分鐘已通過去了,而後再開始調度任務又花了一分鐘,而後做業運行起來,假設機器特別多,幾鈔鍾就算完了,而後寫數據庫假設也花了不多的時間,這樣,從數據產生到最後可使用已通過去了至少兩分多鐘。ide

而流式計算則是數據產生時,則有一個程序去一直監控日誌的產生,產生一行就經過一個傳輸系統發給流式計算系統,而後流式計算系統直接處理,處理完以後直接寫入數據庫,每條數據從產生到寫入數據庫,在資源充足時能夠在毫秒級別完成。oop

固然,跑一個大文件的wordcount,原本就是一個批處理計算的模型,你非要把它放到storm上進行流式的處理,而後又非要讓等全部已有數據處理完才讓storm輸出結果,這時候,你再把它和hadoop比較快慢,這時,其實比較的不是時延,而是比較的吞吐了。學習

storm是典型的流計算系統,mapreduce是典型的批處理系統。下面對流計算和批處理系統流程。大數據

整個數據處理流程來講大體能夠分三個階段:搜索引擎

1. 數據採集與準備3d

2. 數據計算(涉及計算中的中間存儲), 題主中的「那些方面決定」應該主要是指這個階段處理方式。

3. 數據結果展示(反饋)

1)數據採集階段,目前典型的處理處理策略:數據的產生系統通常出自頁面打點和解析DB的log,流計算將數據採集中消息隊列(好比kafaka,metaQ,timetunle)等。批處理系統通常將數據採集進分佈式文件系統(好比HDFS),固然也有使用消息隊列的。咱們暫且把消息隊列和文件系統稱爲預處理存儲。兩者在延時和吞吐上沒太大區別,接下來從這個預處理存儲進入到數據計算階段有很大的區別,流計算通常在實時的讀取消息隊列進入流計算系統(storm)的數據進行運算,批處理一系統通常會攢一大批後批量導入到計算系統(hadoop),這裏就有了時延的區別。

2)數據計算階段,流計算系統(storm)的時延低主要有一下幾個方面

A: storm 進程是常駐的,有數據就能夠進行實時的處理

mapreduce 數據攢一批後由做業管理系統啓動任務,Jobtracker計算任務分配,tasktacker啓動相關的運算進程

B: stom每一個計算單元之間數據之間經過網絡(zeromq)直接傳輸。

mapreduce map任務運算的結果要寫入到HDFS,在於reduce任務經過網絡拖過去運算。相對來講多了磁盤讀寫,比較慢

C: 對於複雜運算

storm的運算模型直接支持DAG(有向無環圖);mapreduce 須要肯多個MR過程組成,有些map操做沒有意義的。

3)數據結果展示

流計算通常運算結果直接反饋到最終結果集中(展現頁面,數據庫,搜索引擎的索引)。而mapreduce通常須要整個運算結束後將結果批量導入到結果集中。實際流計算和批處理系統沒有本質的區別,像storm的trident也有批概念,而mapreduce能夠將每次運算的數據集縮小(好比幾分鐘啓動一次),facebook的puma就是基於hadoop作的流計算系統。

結語

感謝您的觀看,若有不足之處,歡迎批評指正。

對大數據感興趣的同窗關注個人頭條號,並在後臺私信發送關鍵字:「大數據」便可獲取免費的大數據學習資料。

知識體系已整理好(源碼,筆記,PPT,學習視頻),歡迎你們來領取!還有面試題能夠免費獲取。

相關文章
相關標籤/搜索