引言 最近在研究Hadoop的HDFS分布式文件系統(tǒng),在網(wǎng)上找了一些資料,稍微整理了下,并對HDFS分布式存儲進(jìn)行了簡單的存儲測試,跟FTP服務(wù)器存儲進(jìn)行了對比,測試數(shù)據(jù)在文檔后面?,F(xiàn)在先來了解下什么是Hadoop吧! 什么是Hadoop? Hadoop分布式文件系統(tǒng)(HDFS)被設(shè)計成適合運行在通用硬件(commodity hardware)上的分布式文件系統(tǒng)。它和現(xiàn)有的分布式文件系統(tǒng)有很多共同點。但同時,它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。HDFS是一個高度容錯性的系統(tǒng),適合部署在廉價的機(jī)器上。HDFS能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。HDFS放寬了一部分POSIX約束,來實現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。HDFS在最開始是作為Apache Nutch搜索引擎項目的基礎(chǔ)架構(gòu)而開發(fā)的。HDFS是Apache Hadoop Core項目的一部分。這個項目的地址是http://hadoop./core/。 Hadoop框架中最核心的設(shè)計就是:MapReduce和HDFS。 MapReduce MapReduce的思想是由Google發(fā)表的一篇論文GFS、MapReduce所提及而被廣為流傳的,簡單的一句話解釋MapReduce就是“任務(wù)的分解與結(jié)果的匯總”。MapReduce從它名字上來看就大致可以看出個緣由,兩個動詞Map和Reduce,“Map(展開)”就是將一個任務(wù)分解成為多個任務(wù),“Reduce”就是將分解后多任務(wù)處理的結(jié)果匯總起來,得出最后的分析結(jié)果。這不是什么新思想,其實在多線程,多任務(wù)的設(shè)計就可以找到這種思想的影子。不論是現(xiàn)實社會,還是在程序設(shè)計中,一項工作往往可以被拆分成為多個任務(wù),任務(wù)之間的關(guān)系可以分為兩種:一種是不相關(guān)的任務(wù),可以并行執(zhí)行;另一種是任務(wù)之間有相互的依賴,先后順序不能夠顛倒,這類任務(wù)是無法并行處理的。在分布式系統(tǒng)中,機(jī)器集群就可以看作硬件資源池,將并行的任務(wù)拆分,然后交由每一個空閑機(jī)器資源去處理,能夠極大地提高計算效率,同時這種資源無關(guān)性,對于計算集群的擴(kuò)展無疑提供了最好的設(shè)計保證。(廉價的機(jī)器群可以匹敵任何高性能的計算機(jī),縱向擴(kuò)展的曲線始終敵不過橫向擴(kuò)展的斜線)。任務(wù)分解處理以后,那就需要將處理以后的結(jié)果再匯總起來,這就是Reduce要做的工作。 一個Map/Reduce 作業(yè)(job) 通常會把輸入的數(shù)據(jù)集切分為若干獨立的數(shù)據(jù)塊,由 map任務(wù)(task)以完全并行的方式處理它們??蚣軙ap的輸出先進(jìn)行排序,然后把結(jié)果輸入給reduce任務(wù)。通常作業(yè)的輸入和輸出都會被存儲在文件系統(tǒng)中。 整個框架負(fù)責(zé)任務(wù)的調(diào)度和監(jiān)控,以及重新執(zhí)行已經(jīng)失敗的任務(wù)。 Map/Reduce框架由一個單獨的master JobTracker 和每個集群節(jié)點一個slave TaskTracker共同組成。master負(fù)責(zé)調(diào)度構(gòu)成一個作業(yè)的所有任務(wù),這些任務(wù)分布在不同的slave上,master監(jiān)控它們的執(zhí)行,重新執(zhí)行已經(jīng)失敗的任務(wù)。而slave僅負(fù)責(zé)執(zhí)行由master指派的任務(wù)。 mapreduce例子:http://www./code/mapred.html HDFS分布式文件系統(tǒng) HDFS是Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System)的縮寫,為分布式計算存儲提供了底層支持。HDFS的設(shè)計思想:構(gòu)建一個非常龐大的分布式文件系統(tǒng)。在集群中節(jié)點失效是正常的,節(jié)點的數(shù)量在Hadoop中不是固定的.單一的文件命名空間,保證數(shù)據(jù)的一致性,寫入一次多次讀取.典型的64MB的數(shù)據(jù)塊大小,每一個數(shù)據(jù)塊在多個 DN(DataNode)有復(fù)制.客戶端通過NN(NameNode)得到數(shù)據(jù)塊的位置,直接訪問DN獲取數(shù)據(jù)。 從這張圖中可以看出,一個文件其實被分成一個或多個數(shù)據(jù)塊(Block),這些塊存儲在一組Datanode上。Namenode執(zhí)行文件系統(tǒng)的名字空間操作,比如打開、關(guān)閉、重命名文件或目錄,它也負(fù)責(zé)確定數(shù)據(jù)塊到具體Datanode節(jié)點的映射。Datanode負(fù)責(zé)處理文件系統(tǒng)客戶端的讀寫請求,在 Namenode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制。 NameNode功能 映射一個文件到一批的塊,映射數(shù)據(jù)塊到DN節(jié)點上。集群配置管理,數(shù)據(jù)塊的管理和復(fù)制。處理事務(wù)日志:記錄文件生成,刪除等。因為NameNode的全部的元數(shù)據(jù)在內(nèi)存中存儲,所以NN的內(nèi)存大小決定整個集群的存儲量。 NN內(nèi)存中保存的數(shù)據(jù): 1. 文件列表 2. 每一個文件的塊列表 3. 每一個DN中塊的列表 4. 文件屬性:生成時間,復(fù)制參數(shù),文件許可(ACL) Secondary Namenode的功能 Secondary Namenode是一個讓人混淆的名字,其實Secondary Namenode是一個輔助NN處理FsImage和事務(wù)日志的Server,它從NN拷貝FsImage和事務(wù)日志到臨時目錄,合并FsImage和事務(wù)日志生成一個新的FsImage,上傳新的FsImage到NN上,NN更新FsImage并清理原來的事務(wù)日志。 DataNode功能 在本地文件系統(tǒng)存儲數(shù)據(jù)塊,存儲數(shù)據(jù)塊的元數(shù)據(jù),用于CRC校驗。響應(yīng)客戶端對數(shù)據(jù)塊和元數(shù)據(jù)的請求。周期性的向NN報告這個DN存儲的所有數(shù)據(jù)塊信息??蛻舳艘鎯?shù)據(jù)時從NN獲取存儲數(shù)據(jù)塊的DN位置列表,客戶端發(fā)送數(shù)據(jù)塊到第一個DN上,第一個DN收到數(shù)據(jù)通過管道流的方式把數(shù)據(jù)塊發(fā)送到另外的DN 上。當(dāng)數(shù)據(jù)塊被所有的節(jié)點寫入后,客戶端繼續(xù)發(fā)送下一個數(shù)據(jù)塊。DN每3秒鐘發(fā)送一個心跳到NN,如果NN沒有收到心跳在重新嘗試后宣告這個DN失效。當(dāng) NN察覺到DN節(jié)點失效了,選擇一個新的節(jié)點復(fù)制丟失的數(shù)據(jù)塊。 數(shù)據(jù)塊的放置位置和數(shù)據(jù)正確性: 在典型的配置里,數(shù)據(jù)塊一個放在當(dāng)前的節(jié)點,一個放在遠(yuǎn)程的機(jī)架上的一個節(jié)點,一個放在相同機(jī)架上的一個節(jié)點,多于3個的數(shù)據(jù)塊隨意選擇放置。客戶端選擇最近的一個節(jié)點讀取數(shù)據(jù)。Hadoop使用CRC32效驗數(shù)據(jù)的正確性,客戶端每512個byte計算一次效驗,DN負(fù)責(zé)存儲效驗數(shù)據(jù)。客戶端從DN獲取數(shù)據(jù)和效驗數(shù)據(jù),如果效驗出錯,客戶端嘗試另外節(jié)點上復(fù)制的數(shù)據(jù)。 HDFS如何存儲? 流水線復(fù)制:當(dāng)客戶端向HDFS文件寫入數(shù)據(jù)的時候,一開始是寫到本地臨時文件中。假設(shè)該文件的副本系數(shù)設(shè)置為3,當(dāng)本地臨時文件累積到一個數(shù)據(jù)塊的大小時,客戶端會從Namenode獲取一個Datanode列表用于存放副本。然后客戶端開始向第一個Datanode傳輸數(shù)據(jù),第一個Datanode一小部分一小部分(4 KB)地接收數(shù)據(jù),將每一部分寫入本地倉庫,并同時傳輸該部分到列表中第二個Datanode節(jié)點。第二個Datanode也是這樣,一小部分一小部分地接收數(shù)據(jù),寫入本地倉庫,并同時傳給第三個Datanode。最后,第三個Datanode接收數(shù)據(jù)并存儲在本地。因此,Datanode能流水線式地從前一個節(jié)點接收數(shù)據(jù),并在同時轉(zhuǎn)發(fā)給下一個節(jié)點,數(shù)據(jù)以流水線的方式從前一個Datanode復(fù)制到下一個。 HDFS 存儲測試 測試環(huán)境: 服務(wù)器:Linux masters:192.168.4.128 slaves:192.168.4.128、192.168.4.42 結(jié)論 以上這份測試報告是對HDFS分布式文件系統(tǒng)的存儲測試,分別對HDFS和ftp服務(wù)器進(jìn)行了測試比較,從上面的測試結(jié)果可以看出: 1. 對于寫入操作HDFS明顯比FTP服務(wù)器要慢。 2. 在一定機(jī)器數(shù)的集群范圍內(nèi),是可以提高寫入速度的。 3. HDFS適合在大量計算機(jī)組成的大規(guī)模集群上應(yīng)用。 … 相關(guān)資料: hadoop文檔:http://hadoop./common/docs/r0.18.2/cn/index.html ibm文章:http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop1/ http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop2/index.html http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop3/ 其他:http://shoufuban.net/relevant/08/0311/14/14474_1110355.shtml http://www./wiki/Running_Hadoop_On_Ubuntu_Linux_(Multi-Node_Cluster) |
|