首先要明白Storm和Hadoop的應用領域,注意加粗、標紅的關鍵字。
Hadoop是基于Map/Reduce模型的,處理海量數據的離線分析工具。
Storm是分布式的、實時數據流分析工具,數據是源源不斷產生的,例如Twitter的Timeline。
再回到你說的速度問題,只能說Storm更適用于實時數據流,Map/Reduce模型在實時領域很難有所發揮,不能簡單粗暴的說誰快誰慢。
這里的快主要是指的時延。
storm的網絡直傳、內存計算,其時延必然比hadoop的通過hdfs傳輸低得多;當計算模型比較適合流式時,storm的流式處理,省去了批處理的收集數據的時間;因為storm是服務型的作業,也省去了作業調度的時延。所以從時延上來看,storm要快于hadoop。
說一個典型的場景,幾千個日志生產方產生日志文件,需要進行一些ETL操作存入一個數據庫。
假設利用hadoop,則需要先存入hdfs,按每一分鐘切一個文件的粒度來算(這個粒度已經極端的細了,再小的話hdfs上會一堆小文件),hadoop開始計算時,1分鐘已經過去了,然后再開始調度任務又花了一分鐘,然后作業運行起來,假設機器特別多,幾鈔鐘就算完了,然后寫數據庫假設也花了很少的時間,這樣,從數據產生到最后可以使用已經過去了至少兩分多鐘。
而流式計算則是數據產生時,則有一個程序去一直監控日志的產生,產生一行就通過一個傳輸系統發給流式計算系統,然后流式計算系統直接處理,處理完之后直接寫入數據庫,每條數據從產生到寫入數據庫,在資源充足時可以在毫秒級別完成。
當然,跑一個大文件的wordcount,本來就是一個批處理計算的模型,你非要把它放到storm上進行流式的處理,然后又非要讓等所有已有數據處理完才讓storm輸出結果,這時候,你再把它和hadoop比較快慢,這時,其實比較的不是時延,而是比較的吞吐了。
Hadoop M/R基于HDFS,需要切分輸入數據、產生中間數據文件、排序、數據壓縮、多份復制等,效率較低。
Storm 基于ZeroMQ這個高性能的消息通訊庫,不持久化數據。