這里先大致介紹一下Hadoop.
本文大部分內容都是從官網(wǎng)Hadoop上來(lái)的。其中有一篇介紹HDFS的pdf文檔,里面對Hadoop介紹的比較全面了。我的這一個(gè)系列的Hadoop學(xué)習筆記也是從這里一步一步進(jìn)行下來(lái)的,同時(shí)又參考了網(wǎng)上的很多文章,對學(xué)習Hadoop中遇到的問(wèn)題進(jìn)行了歸納總結。
言歸正傳,先說(shuō)一下Hadoop的來(lái)龍去脈。談到Hadoop就不得不提到Lucene和Nutch。首先,Lucene并不是一個(gè)應用程序,而是提供了一個(gè)純Java的高性能全文索引引擎工具包,它可以方便的嵌入到各種實(shí)際應用中實(shí)現全文搜索/索引功能。Nutch是一個(gè)應用程序,是一個(gè)以L(fǎng)ucene為基礎實(shí)現的搜索引擎應用,Lucene為Nutch提供了文本搜索和索引的API,Nutch不光有搜索的功能,還有數據抓取的功能。在nutch0.8.0版本之前,Hadoop還屬于Nutch的一部分,而從nutch0.8.0開(kāi)始,將其中實(shí)現的NDFS和MapReduce剝離出來(lái)成立一個(gè)新的開(kāi)源項目,這就是Hadoop,而nutch0.8.0版本較之以前的Nutch在架構上有了根本性的變化,那就是完全構建在Hadoop的基礎之上了。在Hadoop中實(shí)現了Google的GFS和MapReduce算法,使Hadoop成為了一個(gè)分布式的計算平臺。
其實(shí),Hadoop并不僅僅是一個(gè)用于存儲的分布式文件系統,而是設計用來(lái)在由通用計算設備組成的大型集群上執行分布式應用的框架。
Hadoop包含兩個(gè)部分:
1、HDFS
即Hadoop Distributed File System (Hadoop分布式文件系統)
HDFS具有高容錯性,并且可以被部署在低價(jià)的硬件設備之上。HDFS很適合那些有大數據集的應用,并且提供了對數據讀寫(xiě)的高吞吐率。HDFS是一個(gè)master/slave的結構,就通常的部署來(lái)說(shuō),在master上只運行一個(gè)Namenode,而在每一個(gè)slave上運行一個(gè)Datanode。
HDFS支持傳統的層次文件組織結構,同現有的一些文件系統在操作上很類(lèi)似,比如你可以創(chuàng )建和刪除一個(gè)文件,把一個(gè)文件從一個(gè)目錄移到另一個(gè)目錄,重命名等等操作。Namenode管理著(zhù)整個(gè)分布式文件系統,對文件系統的操作(如建立、刪除文件和文件夾)都是通過(guò)Namenode來(lái)控制。
下面是HDFS的結構:
從上面的圖中可以看出,Namenode,Datanode,Client之間的通信都是建立在TCP/IP的基礎之上的。當Client要執行一個(gè)寫(xiě)入的操作的時(shí)候,命令不是馬上就發(fā)送到Namenode,Client首先在本機上臨時(shí)文件夾中緩存這些數據,當臨時(shí)文件夾中的數據塊達到了設定的Block的值(默認是64M)時(shí),Client便會(huì )通知Namenode,Namenode便響應Client的RPC請求,將文件名插入文件系統層次中并且在Datanode中找到一塊存放該數據的block,同時(shí)將該Datanode及對應的數據塊信息告訴Client,Client便這些本地臨時(shí)文件夾中的數據塊寫(xiě)入指定的數據節點(diǎn)。
HDFS采取了副本策略,其目的是為了提高系統的可靠性,可用性。HDFS的副本放置策略是三個(gè)副本,一個(gè)放在本節點(diǎn)上,一個(gè)放在同一機架中的另一個(gè)節點(diǎn)上,還有一個(gè)副本放在另一個(gè)不同的機架中的一個(gè)節點(diǎn)上。當前版本的hadoop0.12.0中還沒(méi)有實(shí)現,但是正在進(jìn)行中,相信不久就可以出來(lái)了。
2、MapReduce的實(shí)現
MapReduce是Google 的一項重要技術(shù),它是一個(gè)編程模型,用以進(jìn)行大數據量的計算。對于大數據量的計算,通常采用的處理手法就是并行計算。至少現階段而言,對許多開(kāi)發(fā)人員來(lái)說(shuō),并行計算還是一個(gè)比較遙遠的東西。MapReduce就是一種簡(jiǎn)化并行計算的編程模型,它讓那些沒(méi)有多少并行計算經(jīng)驗的開(kāi)發(fā)人員也可以開(kāi)發(fā)并行應用。
MapReduce的名字源于這個(gè)模型中的兩項核心操作:Map和 Reduce。也許熟悉Functional Programming(函數式編程)的人見(jiàn)到這兩個(gè)詞會(huì )倍感親切。簡(jiǎn)單的說(shuō)來(lái),Map是把一組數據一對一的映射為另外的一組數據,其映射的規則由一個(gè)函數來(lái)指定,比如對[1, 2, 3, 4]進(jìn)行乘2的映射就變成了[2, 4, 6, 8]。Reduce是對一組數據進(jìn)行歸約,這個(gè)歸約的規則由一個(gè)函數指定,比如對[1, 2, 3, 4]進(jìn)行求和的歸約得到結果是10,而對它進(jìn)行求積的歸約結果是24。
關(guān)于MapReduce的內容,建議看看孟巖的這篇MapReduce:The Free Lunch Is Not Over!
好了,作為這個(gè)系列的第一篇就寫(xiě)這么多了,我也是剛開(kāi)始接觸Hadoop,下一篇就是講Hadoop的部署,談?wù)勎以诓渴餒adoop時(shí)遇到的問(wèn)題,也給大家一個(gè)參考,少走點(diǎn)彎路。
文章來(lái)源:http://www.cnblogs.com/wayne1017/archive/2007/03/18/668768.html