天天看點

BigTable 和 MapReduce, Google File System 之間的關系是什麼?

Hadoop是很多元件的集合,主要包括但不限于MapReduce,HDFS,HBase,ZooKeeper。MapReduce模仿了Google MapReduce,HDFS模仿了Google File System,HBase模仿了Google BigTable,ZooKeeper或多或少模仿了Google Chubby(沒有前3個出名),是以下文就隻提MapReduce、HDFS、HBase、ZooKeeper吧。

簡單來講,

  • HDFS和HBase是依靠外存(即硬碟)的分布式檔案存儲實作和分布式表存儲實作。HDFS是一個分布式的“雲存儲”檔案系統,它會把一個檔案分塊并分别儲存,取用時分别再取出、合并。重要的是,這些分塊通常會在3個節點(即叢集内的伺服器)上各有1個備份,是以即使出現少數節點的失效(如硬碟損壞、掉電等),檔案也不會失效。如果說HDFS是檔案級别的存儲,那HBase則是表級别的存儲。HBase是表模型,但比SQL資料庫的表要簡單的多,沒有連接配接、聚集等功能。HBase的表是實體存儲到HDFS的,比如把一個表分成4個HDFS檔案并存儲。由于HDFS級會做備份,是以HBase級不再備份。
  • MapReduce則是一個計算模型,而不是存儲模型;MapReduce通常與HDFS緊密配合。舉個例子:假設你的手機通話資訊儲存在一個HDFS的檔案callList.txt中,你想找到你與同僚A的所有通話記錄并排序。因為HDFS會把callLst.txt分成幾塊分别存,比如說5塊,那麼對應的Map過程就是找到這5塊所在的5個節點,讓它們分别找自己存的那塊中關于同僚A的通話記錄,對應的Reduce過程就是把5個節點過濾後的通話記錄合并在一塊并按時間排序。MapReduce的計算模型通常把HDFS作為資料來源,很少會用到其它資料來源比如HBase。
  • ZooKeeper本身是一個非常牢靠的記事本,用于記錄一些概要資訊。Hadoop依靠這個記事本來記錄目前哪些節點正在用,哪些已掉線,哪些是備用等,以此來管理機群。

相比較而言,

  • Storm本身主要是一個分布式環境下的實時資料計算模型,沒有外存存儲部分。Storm的應用場景是,資料來的特别快、并且要求随來随處理。比如Twitter伺服器自身每秒收到來自全世界的推能達幾千條,并且要求收到後還需立即索引,以供查詢。這用傳統的方法乃至Hadoop都是比較難的,因為外存的使用會帶來較大的延遲,這時可以用Storm。Storm節點對記憶體中的資料進行操作,然後流出資料到下一個節點,以此來維系節點間的協作、達到高速協同處理。
  • Storm有一個總的控制節點Nimbus來與ZooKeeper交流、進行叢集管理。
  • Storm還沒有做到資料備份,這是它的不足(2013年Update: 較新的Storm已引入了類事務的概念,會有重做的操作來保證資料的處理)。

是以,Hadoop和Storm都是分布式環境下的計算平台,不過前者依賴外存,适應批處理情形,後者依賴記憶體,适應實時處理、超低延遲、無需大量存儲資料情形。前類出現的時間較早(03年GFS的論文),後類出現的時間較晚(10年Yahoo! S4的論文)。我不大贊同“Storm改進了Hadoop的缺點”的說法——這種說法有點像“輪船改進了汽車的哪些缺點”——因為它們本身即不太同類。Storm和Hadoop有很多相似也有很多差別,适用的場景是不一樣的,主要取決于使用者自己的需求。

*上面很多叙述方法是為了讀者的更好了解,不盡完全準确,比如HBase是有記憶體緩沖機制的,并非隻依賴外存,再比如Nimbus實質上是某個節點上的守護程序,而非節點本身。

最終,關于這幾者各自具體是什麼,我的建議是讀下列論文:

  • 2003 The Google file system
  • 2005 MapReduce: Simplified data processing on large clusters
  • 2008 TheBigtable: A distributed storage system for structured data Google file system
  • 2010 S4: distributed stream computing platform
  • 2011 Fast Crash Recovery in RAMCloud

和Storm的首頁: nathanmarz/storm · GitHub中wiki的Rational頁。

繼續閱讀