轉-Hadoop雖強大,但不是萬能的

jiaaq2008發表於2014-04-10

注:本文翻譯自 http://www.cyanny.com/2013/12/05/hadoop-isnt-silver-bullet/

 

Hadoop是一個分散式海量資料計算的偉大框架。但是,hadoop並不是萬能的。比如,以下場景就不適合用hadoop

 

1、低延遲資料訪問

需要實時查詢並在毫秒級內進行低延時訪問資料就不適合用hadoopHadoop並不適用於資料庫。

資料庫的索引記錄可降低延時的時間,提高響應的速度。但是,如果你在資料庫這方面確實有

實時查詢的需求,可以嘗試一下HBase,這是一個適合隨機訪問和實時讀寫的列式資料庫。

 

2、結構化的資料

Hadoop不適用於處理關聯緊密的結構化資料,但非常適合處理半結構化和非結構化的資料。

它以檔案形式儲存資料,不像RDBMS使用索引來儲存。因此,每一個查詢都要用mapReduce作業

來處理,這樣就面臨著延時問題。

 

3、資料量並不大的時候

Hadoop到底處理多大的資料量呢?答案是TBPB級別。當待分析的資料只有幾十個G的時候,

使用hadoop並不划算。不要一味跟隨潮流的去使用hadoop,而要看看你自己的需求。

 

4、大量的小檔案

當有大量的小檔案時,由於NameNode需儲存block塊的對映資訊和後設資料資訊,導致namenode

臨著巨大的記憶體壓力。為了解決nameNode的這個瓶頸,hadoop使用了HDFS Federation(聯邦)機制。

 

5、頻繁的寫操作和檔案更新

HDFS使用一次寫入多次讀取的方式。當有太多的檔案需要更新時,hadoop並支援這種情況。

 

 

6、MapReduce(以下簡稱MR)或許不是最佳的選擇

MapReduce是一個簡單的並行程式設計模型。由於並行性,因此你需要確保每一個MR作業所處

理的資料和其他的作業相互獨立開來。每個MR不應該有依賴關係。

 

如果你在MR中共享一些資料的話,你可以這樣做:

迭代:執行多個MR作業,前一個的輸出結果作為下一個作業的輸入。

共享狀態資訊:不要在記憶體中共享資訊,因為每個MR作業是執行在單個JVM例項上的。

 

 

相關文章