注:本文翻譯自 http://www.cyanny.com/2013/12/05/hadoop-isnt-silver-bullet/
Hadoop是一個分散式海量資料計算的偉大框架。但是,hadoop並不是萬能的。比如,以下場景就不適合用hadoop:
1、低延遲資料訪問
需要實時查詢並在毫秒級內進行低延時訪問資料就不適合用hadoop。Hadoop並不適用於資料庫。
資料庫的索引記錄可降低延時的時間,提高響應的速度。但是,如果你在資料庫這方面確實有
實時查詢的需求,可以嘗試一下HBase,這是一個適合隨機訪問和實時讀寫的列式資料庫。
2、結構化的資料
Hadoop不適用於處理關聯緊密的結構化資料,但非常適合處理半結構化和非結構化的資料。
它以檔案形式儲存資料,不像RDBMS使用索引來儲存。因此,每一個查詢都要用mapReduce作業
來處理,這樣就面臨著延時問題。
3、資料量並不大的時候
Hadoop到底處理多大的資料量呢?答案是TB或PB級別。當待分析的資料只有幾十個G的時候,
使用hadoop並不划算。不要一味跟隨潮流的去使用hadoop,而要看看你自己的需求。
4、大量的小檔案
當有大量的小檔案時,由於NameNode需儲存block塊的對映資訊和後設資料資訊,導致namenode面
臨著巨大的記憶體壓力。為了解決nameNode的這個瓶頸,hadoop使用了HDFS Federation(聯邦)機制。
5、頻繁的寫操作和檔案更新
HDFS使用一次寫入多次讀取的方式。當有太多的檔案需要更新時,hadoop並支援這種情況。
6、MapReduce(以下簡稱MR)或許不是最佳的選擇
MapReduce是一個簡單的並行程式設計模型。由於並行性,因此你需要確保每一個MR作業所處
理的資料和其他的作業相互獨立開來。每個MR不應該有依賴關係。
如果你在MR中共享一些資料的話,你可以這樣做:
迭代:執行多個MR作業,前一個的輸出結果作為下一個作業的輸入。
共享狀態資訊:不要在記憶體中共享資訊,因為每個MR作業是執行在單個JVM例項上的。