BigTable 和 MapReduce, Google File System 之間的關係是什麼?
阿新 • • 發佈:2018-11-19
Hadoop是很多元件的集合,主要包括但不限於MapReduce,HDFS,HBase,ZooKeeper。MapReduce模仿了Google MapReduce,HDFS模仿了Google File System,HBase模仿了Google BigTable,ZooKeeper或多或少模仿了Google Chubby(沒有前3個出名),所以下文就只提MapReduce、HDFS、HBase、ZooKeeper吧。
簡單來講,
*上面很多敘述方法是為了讀者的更好理解,不盡完全準確,比如HBase是有記憶體緩衝機制的,並非只依賴外存,再比如Nimbus實質上是某個節點上的守護程序,而非節點本身。
最終,關於這幾者各自具體是什麼,我的建議是讀下列論文:
簡單來講,
- 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已引入了類事務的概念,會有重做的操作來保證資料的處理)。
*上面很多敘述方法是為了讀者的更好理解,不盡完全準確,比如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