天天看點

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

https://www.zhihu.com/question/20098507

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?修改

寫補充說明 舉報 添加評論  分享   •  邀請回答 按投票排序 按時間排序

17 個回答

143贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

張雲聰 ,分布式、流式計算 Spike Thomas、theta、李勝  等人贊同 這裡的快主要是指的 時延。

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

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

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

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

當然,跑一個大檔案的wordcount,本來就是一個批處理計算的模型,你非要把它放到storm上進行流式的處理,然後又非要讓等所有已有資料處理完才讓storm輸出結果,這時候,你再把它和hadoop比較快慢,這時,其實比較的不是時延,而是比較的 吞吐了。 編輯于 2013-08-20  6 條評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 85贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

李赫元 ,Hadoop, Hive, Python、Java 嶽飛、theta、Yuqi Chou  等人贊同 首先要明白Storm和Hadoop的應用領域,注意加粗、标紅的關鍵字。

Hadoop是基于Map/Reduce模型的,處理海量資料的 離線分析工具。

Storm是分布式的、 實時資料流分析工具,資料是源源不斷産生的,例如Twitter的Timeline。

再回到你說的速度問題,隻能說Storm更适用于實時資料流,Map/Reduce模型在實時領域很難有所發揮,不能簡單粗暴的說誰快誰慢。 編輯于 2012-07-23  3 條評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 43贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

kenny 姜一、董十七、Buck  等人贊同 最主要的方面:Hadoop使用磁盤作為中間交換的媒體,而storm的資料是一直在記憶體中流轉的。

兩者面向的領域也不完全相同,一個是批量處理,基于任務排程的;另外一個是實時處理,基于流。

以水為例, Hadoop可以看作是 純淨水,一桶桶地搬;而Storm是用 水管,預先接好(Topology),然後打開水龍頭,水就源源不斷地流出來了。 編輯于 2013-11-29  9 條評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 27贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

楊曉青 ,分布式計算/資料架構 臨時演員李呆呆、張清豪、chape  等人贊同 “快”這個詞是不明确的,專業屬于點有兩個層面:

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

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

首先明确一點,在消耗資源相同的情況下,一般來說storm的延時低于mapreduce。但是吞吐也低于mapreduce。  @張雲聰已經給了比較好的介紹,我再補充一下。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做的流計算系統。 釋出于 2014-01-21  1 條評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 13贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

延雲雲計算 ,大資料 戰鬥原始人、staticor、尚凱兒  等人贊同 您好,我是Jstorm的committer 延年(目前創業創辦 延雲YDB, http://ycloud.net.cn/)

我們阿裡的團隊将Storm的開發語言更換為java版本,阿裡的Jstorm目前已經正式被Apache所接受,成為apache Storm的子版本。本人對storm還是有一定的了解的。下面說說我本人的看法。

首先快是相對的,您說的hadoop不快,應該知的是hadoop下的mapreduce慢,因為還有很多跑在hadoop之上的業務他也快,比如說Hbase,以及我們的延雲YDB。

另這個快其實您的本意是時效性好,而不是說計算速度快。這個地方要加以區分。

因為如果從計算速度上來看,mapreduce的計算速度不見得就慢,比如說算一個pi.

首先第一點:storm的資料在記憶體中,不落地,IO消耗很小。

storm因為本身是流式計算的特性,資料從産生到最終能看到結果,也就是秒,甚至是毫秒的延遲。流計算,您可以想象成一個流水線,各種資料在流水線上源于流動,而其中的Bolt就是流水線上的勞工,不同的Bolt負責不同流程上産品的處理,每條資料經過一個人處理完畢後,會交給第二個作業的人去處理,這期間資料不會落地,而是直接在流水線上傳輸着,也就是說,資料一直在記憶體裡面,不會像mapreduce在計算的過程中,map的處理結果,落地到磁盤上,reduce在去下載下傳map的結果,計算完畢後還要放到磁盤上,多次mapreduce要反反複複的多次資料落地,IO肯定特别大。

第二點:他時效性好,是因為是預計算-不留原始資料,隻能看特定的次元、粒度。

如果資料經過預先彙總,原始資料沒有保留,在未來某一時間如果想檢視其它次元或者粒度的資料資料将無法實作。

hadoop則儲存了原始資料的明細,可以根據任何需要,來來回回的反複查詢,但是他的mapreduce屬于,暴力掃描的方式,不用多說,性能很差,需要狂堆機器,成本也太高。而這類系統一般的并發也不大,如果資料量在百億級别,千台的叢集規模,一天也就能進行幾十萬次的查詢而已。

順便說下我得創業項目,YDB則采用大索引技術,通過索引技術直接定位到相關記錄,避免記錄的逐條掃描,即使隻有50幾台的機器,百億資料也能查詢個幾百萬次。是以通過索引來拟補mapreduce的不足。YDB也是儲存資料明細,查詢的時候根據大索引技術以及獨特的标簽技術,在幾秒的時間,傳回任意次元,任意篩選條件的結果,靈活性很好,多元鑽取,全文檢索都是YDB的強項。

第三,hadoop上檔案時效性較差,因為namenode不能有太多的小檔案,資料要經過聚集幾分鐘,甚至一小時,一天,集中導入到hdfs裡面,也就導緻了資料時效性很差。流系統資料時實時流入的,時效性本身就好。

同時也PS下,上面吐槽storm穩定性的同學。

storm真的很穩定,阿裡的jstorm每天處理超過萬億條的消息,這個是真的。但是有一定的開發成本,是以想寫好,不是特别的容易。 釋出于 2015-12-05  添加評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 7贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

Sean Young ,#程式員#架構師#PMP wang kewin、孫膑、喬海軍  等人贊同

Storm的主工程師Nathan Marz表示:  Storm可以友善地在一個計算機叢集中編寫與擴充複雜的實時計算, Storm之于實時處理,就好比 Hadoop之于批處理。 Storm保證每個消息都會得到處理,而且它很快——在一個小叢集中,每秒可以處理數以百萬計的消息。更棒的是你可以使用任意程式設計語言來做開發。

Storm的主要特點如下:

  1. 簡單的程式設計模型。類似于MapReduce降低了并行批處理複雜性, Storm降低了進行實時處理的複雜性。
  2. 可以使用各種程式設計語言。你可以在 Storm之上使用各種程式設計語言。預設支援Clojure、Java、Ruby和Python。要增加對其他語言的支援,隻需實作一個簡單的 Storm通信協定即可。
  3. 容錯性。 Storm會管理工作程序和節點的故障。
  4. 水準擴充。計算是在多個線程、程序和伺服器之間并行進行的。
  5. 可靠的消息處理。 Storm保證每個消息至少能得到一次完整處理。任務失敗時,它會負責從消息源重試消息。
  6. 快速。系統的設計保證了消息能得到快速的處理,使用ØMQ作為其底層消息隊列。
  7. 本地模式。 Storm有一個“本地模式”,可以在處理過程中完全模拟 Storm叢集。這讓你可以快速進行開發和單元測試。

source:  http://www.infoq.com/news/2011/09/twitter-storm-real-time-hadoop

個人總結:

  1. Hadoop M/R基于HDFS,需要切分輸入資料、産生中間資料檔案、排序、資料壓縮、多份複制等,效率較低。
  2. Storm 基于ZeroMQ這個高性能的消息通訊庫,不持久化資料。

釋出于 2012-04-27  添加評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 0贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

Frank ,Radical Dreamer @kenny 的水的例子很形象,我再發揮一下。例如給純淨水消毒需要經過27道工序,hadoop差不多是每一道工序都把桶裝水倒出來消毒,完了再裝回去,下一道工序再倒出來;而storm相當于把水倒入管道中,流經不同的消毒池,完成所有工序,然後再流回桶裡。是以storm比hadoop快,尤其是需要多次疊代的場景,不用每次都把中間資料寫回磁盤。

差點看成spark的問題,最近拿spark和hadoop比的問題太多了。 釋出于 2015-09-16  添加評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 1贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

劉從新 ,大資料,機器學習, 深度學習, Hacking 周揚 贊同 兩者屬于不同的計算範式,批處理v.s.實時,不存在可比性。相反,對于一個大型的大資料系統,要兼顧批處理和實時性要求,在架構上會将Hadoop和Storm結合起來。在Storm主工程師Nathan Marz的Big Data一書中,有介紹。 釋出于 2014-12-05  添加評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 5贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

焦緒進 帆大飯、desperado光、天外飛鉗  等人贊同 我不講你能知道麼?你還以為Storm能解決過車查詢和線上實時統計分析呢!

但實際上storm和hadoop的根本完全就是不同的應用領域。

storm隻能處理 資料入庫、超速判斷、網站線上使用者特别多 之類的問題,與大資料查詢毫無關系。

它所能處理的“大”是指 實時線上請求量的 “大”。

我認為這兩個東西 就不應該做對比。是不同領域的東西。它們之間快慢比較根本沒有意義。

引用一段話:

爬犁和寶劍哪個快?要看是用來耕地,還是砍人——hadoop像個爬犁,耕地很兇悍;storm像把寶劍,砍人鋒利無比。 釋出于 2015-03-02  添加評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 2贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

隔壁老王 ,雲計算工程師 孫膑、yunxing wang 贊同 其實 @張雲聰 的回答已經說明了原因。

這裡再次強調根本原因,Hadoop是磁盤級計算,進行計算時,資料在磁盤上,需要讀寫磁盤;Storm是記憶體級計算,資料直接通過網絡導入記憶體。讀寫記憶體比讀寫磁盤速度快n個數量級。根據Harvard CS61課件,磁盤通路延遲約為記憶體通路延遲的75000倍。是以Storm更快。 釋出于 2013-12-10  添加評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 2贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

賓子 ,活在當下 Lei Zhang、譚大坤 贊同 爬犁和寶劍哪個快?要看是用來耕地,還是砍人——hadoop像個爬犁,耕地很兇悍;storm像把寶劍,砍人鋒利無比。 釋出于 2014-04-15  1 條評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 0贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

王辰光 ,INTJ / 業餘見習攻城師 場景不一樣 沒有比較的必要…… 釋出于 2014-02-09  添加評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 0贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

李慧 ,工程師。。。 兩者是互補關系,不好這麼比較 釋出于 2014-03-09  添加評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 0贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

He Ransom ,ITman MapReduce是批處理,先準備好資料,再進行處理,期間還有磁盤會參與運算,比較适合大量資料的離線處理。

Storm整個計算都在記憶體中完成,不需要任何磁盤參與,是以十分适合實時計算。 釋出于 2014-07-17  添加評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 0贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

徐小天 ,IT行業,感興趣于新奇的事物 說storm快的為何都忽略了取資料這個過程,大資料分析這個取資料過程很關鍵,取資料磁盤網絡帶寬都有限制;若說資料已經拿回來計算MR中間會有大量回寫磁盤的操作,速度肯定上不來,這是storm必定快 釋出于 2015-02-03  1 條評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 0贊同 反對,不會顯示你的姓名

為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?

Jack Chen Storm系列文章  Storm介紹(一) 了解Storm并發