Hadoop是阿帕奇軟件基金下的頂級項目,這個項目下面擁有多個誕生于阿帕奇孵化器的子項目。Hadoop項目提供和支持開源軟件的發(fā)展,它提供一個框架,用于開發(fā)高度可擴展的分布式計算應(yīng)用軟件。Hadoop框架負責處理任務(wù)并行分配的細節(jié),使得應(yīng)用程序開發(fā)者可以專注于應(yīng)用程序邏輯上。
注意,Hadoop徽標是一個胖胖的黃色的大象。而且Hadoop碰巧是首席架構(gòu)師的寶寶的黃色大象的名字。
Hadoop項目主頁(http://hadoop.apache.org/)談到:
Hadoop項目是一個可靠的、可擴展的、基于分布式計算的開源軟件,它包括:
Hadoop核心是我們的旗艦項目,它提供了一個分布式文件系統(tǒng)子項目(HDFS)和支持MapReduce分布式計算的軟件架構(gòu)。
HBase建立在Hadoop核心上并提供一個可擴展的分布式數(shù)據(jù)庫。
Pig是一個高高級數(shù)據(jù)流語言和實施并行計算的框架。它也是構(gòu)建在Hadoop核心之上的。
ZooKeeper是一個高效的,可靠的協(xié)作支持系統(tǒng)。分布式應(yīng)用程序使用ZooKeeper來存儲和傳輸關(guān)鍵共享狀態(tài)的更新。
Hive是構(gòu)建在Hadoop上的數(shù)據(jù)倉庫。它提供了數(shù)據(jù)提取,數(shù)據(jù)隨機查詢和分析的功能。
Hadoop核心項目提供了在低端硬件上構(gòu)建云計算環(huán)境的基礎(chǔ)服務(wù),它也提供了運行在這個云中的軟件所必須的API接口。Hadoop內(nèi)核的兩個基本部分是MapReduce框架,也就是云計算環(huán)境,和Hadoop分布式文件系統(tǒng)(HDFS)。
注意:在Hadoop核心框架中,MapReduce常被稱為mapred,HDFS經(jīng)常被稱為dfs。
Hadoop核心MapReduce框架需要一個共享文件系統(tǒng)。這個共享文件系統(tǒng)并不需要是一個系統(tǒng)級的文件系統(tǒng),任何一個分布式文件系統(tǒng)可以供框架使用就可以滿足MapReduce的需求。
盡管Hadoop核心提供了HDFS分布式文件系統(tǒng),但是,沒有這個分布式文件系統(tǒng)它仍然可以工作。在Hadoop JIRA(Bug跟蹤系統(tǒng)), 第1686項就是用來跟蹤如何將HDFS從Hadoop分離使用。除了HDFS,Hadoop核心也支持云存儲(原名為Kosmos)文件系統(tǒng)(http://kosmosfs.sourceforge.net/)和亞馬遜簡單存儲服務(wù)(S3)文件系統(tǒng)(http://aws.amazon.com/s3/)。Hadoop核心框架通過專用的接口訪問HDFS,云存儲和S3。用戶可以自由地使用任何分布式文件系統(tǒng),只要它是一個系統(tǒng)可映射的文件系統(tǒng),例如,網(wǎng)絡(luò)文件系統(tǒng)(NFS),全局文件系統(tǒng)(GFS)或者Lustre。
當把HDFS作為共享文件系統(tǒng),Hadoop能夠分析得知哪些節(jié)點擁有輸入的數(shù)據(jù)拷貝,然后試圖調(diào)度運行在那臺機器的作業(yè)去讀取那塊數(shù)據(jù)。本書講述的就是以HDFS文件系統(tǒng)為基礎(chǔ)的Hadoop應(yīng)用和開發(fā)。
Hadoop的核心MapReduce
Hadoop MapReduce環(huán)境為用戶提供了一個復雜的框架在一個集群上來管理和執(zhí)行Map和Reduce作業(yè)。用戶需要向框架輸入如下信息:
分布式文件系統(tǒng)中作業(yè)輸入的位置
分布式文件系統(tǒng)中作業(yè)輸出的位置
輸入格式
輸出格式
包含Map方法的類
包含Reduce方法的類,它是可選的。
包含Map和Reduce方法和其他支持類的Jar文件的位置
如果一個作業(yè)不需要一個Reduce方法,那么,用戶不需指定一個Reducer類,作業(yè)的Reduce階段也是不會被執(zhí)行的??蚣軙指钶斎霐?shù)據(jù),在集群里調(diào)度和執(zhí)行Map作業(yè)。如果需要,它將Map作業(yè)的輸出進行排序,然后,將排序的結(jié)果輸出給Reduce任務(wù)。最后將Reduce作業(yè)輸出數(shù)據(jù)輸出到輸出目錄,最后將工作狀況匯報給用戶。
MapReduce任務(wù)是用來處理鍵/值對的。該框架將轉(zhuǎn)換每個輸入的記錄成一個鍵/值對,每對數(shù)據(jù)會被輸入給Map作業(yè)。Map任務(wù)的輸出是一套鍵/值對,原則上,輸入是一個鍵/值對,但是,輸出可以是多個鍵/值對。然后,它對Map輸出鍵/值對分組和排序。然后,對排序的每個鍵值對調(diào)用一次Reduce方法,它的輸出是一個鍵值和一套關(guān)聯(lián)的數(shù)據(jù)值。Reduce方法可以輸出任意數(shù)量的鍵/值對,這將被寫入工作輸出目錄下的輸出文件。如果Reduce輸出鍵值保持和Reduce輸入鍵值一致,最終的輸出仍然保持排序。
該框架提供了兩個處理過程來管理MapReduce作業(yè):
TaskTracker在集群中的計算節(jié)點上管理和執(zhí)行各個Map和Reduce作業(yè)。
JobTracker接受作業(yè)提交,提供作業(yè)的監(jiān)測和控制,管理任務(wù),以及分配作業(yè)到TaskTracker節(jié)點上。
一般來說,每個集群有一個JobTracker進程,集群中的每個節(jié)點有一個或多個TaskTracker進程。JobTracker是一個關(guān)鍵模塊,它出現(xiàn)問題會引起系統(tǒng)的癱瘓,如果一個TaskTracker出現(xiàn)問題,JobTracker會調(diào)度其他TaskTracker進程重試。
請注意,Hadoop核心MapReduce環(huán)境的一個優(yōu)秀的功能是:當一個作業(yè)在執(zhí)行時,你可以添加TaskTracker到集群中,還可以派遣一個作業(yè)到新的節(jié)點上。
Hadoop的分布式文件系統(tǒng)
HDFS是專門為MapReduce作業(yè)所設(shè)計的文件系統(tǒng)。MapReduce作業(yè)從HDFS文件系統(tǒng)中讀入大數(shù)量級的數(shù)據(jù)進行處理,處理后把輸出寫回HDFS文件系統(tǒng)。HDFS并不是用來處理隨機存取數(shù)據(jù)的。為了達到數(shù)據(jù)的穩(wěn)定性,它把數(shù)據(jù)存儲到多個存儲節(jié)點上。在Hadoop社區(qū),我們把它稱為副本。只要有一個數(shù)據(jù)副本存在,數(shù)據(jù)使用者就可以安全使用這些數(shù)據(jù)。
HDFS通過兩個進程來完成的,
NameNode進行文件系統(tǒng)元數(shù)據(jù)的管理,它提供管理和控制服務(wù)。
DataNode提供數(shù)據(jù)塊存儲和查詢服務(wù)。
在HDFS文件系統(tǒng)里有一個NameNode進程,它是關(guān)鍵模塊,如果它出現(xiàn)問題會引起整個系統(tǒng)的癱瘓。Hadoop核心提供NameNode的恢復和自動備份功能,但是沒有運行時恢復功能。一個集群有多個DataNode進程,通常情況下,集群中的每個存儲節(jié)點有一個DataNode進程。
注意:在集群中的一個節(jié)點中提供TaskTracker服務(wù)和DataNode服務(wù)是常見的。在一個節(jié)點里提供JobTracker和NameNode服務(wù)也是常見。