為什麼說Storm比Hadoop 快?

2021-09-23 06:35:47 字數 1996 閱讀 8927

快」這個詞是不明確的,專業屬於點有兩個層面:

1.時延 , 指資料從產生到運算產生結果的時間,題主的「快」應該主要指這個。

2. 吞吐, 指系統單位時間處理的資料量。

首先明確一點,在消耗資源相同的情況下,一般來說storm的延時低於mapreduce。但是吞吐也低於mapreduce。

storm的網路直傳、記憶體計算,其時延必然比hadoop的通過hdfs傳輸低得多;當計算模型比較適合流式時,storm的流式處理,省去了批處理的收集資料的時間;因為storm是服務型的作業,也省去了作業排程的時延。所以從時延上來看,storm要快於hadoop。

說乙個典型的場景,幾千個日誌生產方產生日誌檔案,需要進行一些etl操作存入乙個資料庫。

假設利用hadoop,則需要先存入hdfs,按每一分鐘切乙個檔案的粒度來算(這個粒度已經極端的細了,再小的話hdfs上會一堆小檔案),hadoop開始計算時,1分鐘已經過去了,然後再開始排程任務又花了一分鐘,然後作業執行起來,假設機器特別多,幾鈔鐘就算完了,然後寫資料庫假設也花了很少的時間,這樣,從資料產生到最後可以使用已經過去了至少兩分多鐘。

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

當然,跑乙個大檔案的wordcount,本來就是乙個批處理計算的模型,你非要把它放到storm上進行流式的處理,然後又非要讓等所有已有資料處理完才讓storm輸出結果,這時候,你再把它和hadoop比較快慢,這時,其實比較的不是時延,而是比較的吞吐了。

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

整個資料處理流程來說大致可以分三個階段:

1. 資料採集與準備

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做的流計算系統。

為什麼說Mac比windows更安全?

大家的普遍的看法是,mac不像windows pc那樣容易受到病毒的感染。但是,為什麼呢?什麼是惡意軟體?我們經常將 惡意軟體 和 病毒 互換使用,其實它們指的是對於不同型別的攻擊。普通病毒會通過降低速度,填充硬碟驅動器或刪除重要檔案來損壞您的軟體。事實上,病毒很難清除,因為它們會在您的作業系統內複...

為什麼說 i比i 效率高?

不知道你是否聽說過 i比i 快的說法,真的如此嗎?這兩個表示式從我們初學程式語言的時候就會接觸到。前者是自增後取值,後者是取值後自增。我們看乙個簡單的例子。include using namespace std int main 編譯後報錯 main.cpp 7 19 error lvalue re...

為什麼說POSTGRESQL資料庫比MySQL強?

postgresql在很多方面都比mysql強,如複雜sql的執行 儲存過程 觸發器 索引。同時postgresql是多程序的,而mysql是執行緒的,雖然併發不高時,mysql處理速度快,但當併發高的時候,對於現在多核的單台機器上,mysql的總體處理效能不如postgresql,原因是mysql...