王海波

摘 要:隨著信息時代的飛速發展。海量數據的應用處理已經成為大家重點關注的首要問題。論文首先對Hadoop技術的產生及特點進行介紹,然后重點分析了Hadoop的兩大關鍵技術分布式文件系統(HDFS)和MapReduce編程模型,最后對Hadoop的關鍵技術進行總結并給出一些看法,并對未來發展方向進行了展望。
關鍵詞:Hadoop;HDFS體系結構;MapReduce
隨著信息時代的飛速發展,隨著各種數據的迅猛增長。海量數據的應用處理已經成為大家重點關注的首要問題。在很多傳統的行業里,大量數據的查詢與存儲主要還是依靠關系型數據庫管理系統。而Hadoop平臺的出現,提供了廉價的處理大數據的能力。完美的解決了在企業里海量數據處理和應用的要求,使得Hadoop成為現代企業處理海量數據的最好的選擇。
論文首先對Hadoop技術的產生及特點進行介紹,然后重點分析了Hadoop的兩大關鍵技術分布式文件系統(HDFS)和MapReduce編程模型,最后對Hadoop的關鍵技術進行總結并給出一些看法。
一、Hadoop技術介紹
Apache公司于2005年最先引入Hadoop,它源于google公司開發的MapReduce和Google File System(GFS)項目。Hadoop因為對并行分布處理“大數據”有利而得到特別重視,是新一代的架構和技術。Hadoop是一個分布式的計算平臺,用戶可以使用它開發并處理海量數據的各種應用軟件。HDFS和MapReduce是Hadoop框架中最為核心的設計。HDFS主要負責海量數據的存儲,MapReduce主要負責數據的計算。
二、Hadoop的關鍵技術之——HDFS體系結構
HDFS被稱為分布式文件系統,是Hadoop的核心技術。HDFS的設計使得它適合運行在通用硬件上,可以部署在在廉價的機器上。HDFS的優勢:HDFS可以處理超大文件,可以存儲數GB級、數TB級、數PB級的超大文件;HDFS可以集群規模動態擴展,數百甚至數千個節點能夠動態的加入到集群中;HDFS又具有主容錯的優勢,在集群中的節點掛點可以由其他的節點代替;HDFS一般不處理交互式處理,主要處理批處理,采用流式讀寫,可以“一次寫入,多次讀取”,當數據源生成一個數據集之后,這個數據集會被復制分發到不同的存儲節點,可以響應各類數據分析任務的請求。
HDFS更加看重的是數據的吞量,不太看重數據的訪問速度;由于HDFS 的安全、可靠及高可用性,Hadoop可以采用的硬件要求不高,可以使用廉價的商用機器集群。在分布式計算中,HDFS是數據存儲管理的基礎。HDFS具有很多優點,像高獲得性,高可靠性,高擴展性等。這些優點使得HDFS可以穩定的存儲海量數據。
HDFS是一個主/從(Master/Slave)的體系結構。我們從用戶的角度來看,HDFS和傳統的文件系統差不多,它可以對文件執行Create、Read、Update和Delete操作。因為HDFS是分布式存儲,在HDFS體系結構中,有兩種類型的結點,一類是元數據結點(NameNode);另一類是數據結點(DataNode)。DataNode用來存儲實際的數據,NameNode(主控制服務器)是用來管理文件系統的元數據。在文件系統中,NameNode負責管理元數據,DataNode負責處理實際數據的存儲。通過NameNode和DataNodes的交互,客戶可以訪問文件系統。客戶端通過和NameNode相關聯,可以獲取文件的元數據。同時,通過直接和DataNode的交互,進行文件的輸入和輸出操作
(一)NameNode
Namenode 上保存著 HDFS 的名字空間。Namenode使用EditLog 的事務日志記錄各種對文件系統的元數據的修改操作。事務日志(EditLog)被存儲在本地操作系統的文件系統中。在FsImage 的文件中,存儲著整個文件系統的名字空間,同樣的FsImage也被存儲在本地操作系統的文件系統中。整個文件系統的名字空間文件數據塊映射(Blockmap)的映像都保存在內存中。由于對元數據結構的緊湊設計,可以在一個4G內存的 Namenode中能夠處理大量的文件及目錄。
我們說的checkpoint(檢查點)是這樣一個過程,首先,Namenode啟動,然后可以從硬盤中讀取FsImage和Editlog,然后在將每個Editlog 中的事務作用在內存中的 FsImage 上,接著將新得到的這個FsImage從內存中保存到本地的硬盤,最后就可以刪除原來的Editlog。就現在的實現而言,檢查點僅僅發生在 Namenode 啟動時,在將來會實現支持周期性的檢查點。
(二)DataNode
Datanode 可以把HDFS 的數據以文件的形式存儲在本地,Datanode不知道HDFS 文件的相關信息。HDFS的數據被劃分成若干的數據塊,Datanode將每個數據塊分別存儲在本地文件系統的一個獨立文件中。Datanode 不會在一個目錄下創建所有文件,Datanode采用試探的方法來確定每個目錄中的文件數目,這樣,在時機允許時創建相應的子目錄。
當我們啟動一個Datanode時,Datanode將掃描所有的本地文件系統,這樣會產生一個列表,在這個列表中將所有 HDFS 數據塊和本地文件一一對應,然后會產生一個報告,并將報告然發送到 Namenode ,這個報告就是塊狀態報告。
通常,我們可以這樣來進行HDFS部署,將NameNode進行在一個專有的機器上,使用多個集群中的其他機器來運行一個DataNode;當然我們也可以在同一臺機器上既運行NameNode又運行一個或多個DataNode。在一個集群中,只設計一個NameNode,這樣的設計可以簡化系統的架構。
(三)Hadoop的關鍵技術——MapReduce技術
對于大量數據的操作處理,MapReduce采用了一種全新的思想,它首先分發給一個主節點,然后在將這些操作給下面的各個分節點,分節點協作完成。在處理結果時,先得到每個分節點的結果,最后在處理并得到最終的結果。我們可以這樣說, MapReduce是分解相應任務并匯總最終結果。MapReduce有兩個特別重要的函數,reduce和map,map的主要功能是將一個任務進行分解。
而reduce的主要功能是匯總多任務的處理結果。這里,我們要特別注意,在采用 map和reduce處理數據時有這樣的特性:我們可以將待處理的數據集進行分解,將其分解為多個較小的數據集,并且我們可以并行處理這些小的數據集。
在上圖中,我們可以看到,如何使用MapReduce來處理大數據集。在這個模型中,有兩個非常重要的函數,分別是map和reduce函數。用戶可以根據自己的實際需求來設計函數的功能及規則,用戶可以根據自己定義的規則,輸入一個對,可以轉換成另外的一個或者一批