專案主頁:HTTP://hadoop.apache.org
一個分散式系統基礎架構,由Apache基金會開發。 使用者可以在不了解分散式底層細節的情況下,開發分散式程式。 充分利用集群的威力高速運算和存儲。
起源:Google的集群系統
Google的資料中心使用廉價的Linux PC機組成集群,在上面運行各種應用。 即使是分散式開發的新手也可以迅速使用Google的基礎設施。 核心元件是3個:
1、GFS(Google File System)。 一個分散式檔案系統,隱藏下層負載均衡,冗余複製等細節,對上層程式提供一個統一的檔案系統API介面。 Google根據自己的需求對它 進行了特別優化,包括:超大檔的訪問,讀操作比例遠超過寫操作,PC機極易發生故障造成節點失效等。 GFS把檔分成64MB的塊,分佈在集群的機器 上,使用Linux的檔案系統存放。 同時每塊檔至少有3份以上的冗余。 中心是一個Master節點,根據檔索引,找尋檔塊。 詳見Google的工程 師發佈的GFS論文。
2、MapReduce。 Google發現大多數分散式運算可以抽象為MapReduce操 作。 Map是把輸入Input分解成中間的Key/Value對,Reduce把Key/Value合成最終輸出Output。 這兩個函數由程式師提供給 系統,下層設施把Map和Reduce操作分佈在集群上運行,並把結果存儲在GFS上。
3、BigTable。 一個大型的分散式資料庫,這個資料庫不是關係式的資料庫。 像它的名字一樣,就是一個巨大的表格,用來存儲結構化的資料。
以上三個設施Google均有論文發表。
開源實現
這個分散式框架很有創造性,而且有極大的擴充性,使得Google在系統輸送量上有很大的競爭力。 因此Apache基金會用JAVA實現了一個開源版 本,支援Fedora等Linux平臺。 目前Hadoop受到Yahoo的支援,有Yahoo員工長期工作在專案上,而且Yahoo內部也準備使用 Hadoop代替原來的基於FreeBSD的系統。
Hadoop實現了HDFS檔案系統和MapRecue。 目前版本是0.16。 還不成熟,但是已經可以在2000個節點上運行。 使用者只要繼承MapReduceBase,提供分別實現Map和Reduce的兩個類,並註冊Job即可自動分散式運行。
HDFS把節點分成兩類:NameNode和DataNode。 NameNode是唯一的,程式與之通信,然後從DataNode上存取檔。 這些操作是透明的,與普通的檔案系統API沒有區別。
MapReduce則是JobTracker節點為主,分配工作以及負責和使用者程式通信。
未來
目前這個專案還在進行中,還沒有到達1.0版本,和Google系統的差距也非常大,但是進步非常快,值得關注。
另外,這是雲計算(Cloud Computing)的初級階段的實現,是通向未來的橋樑。