山東科技大學(xué)數(shù)學(xué)與系統(tǒng)工程學(xué)院 秦懷強(qiáng)
Hadoop的深入探究
山東科技大學(xué)數(shù)學(xué)與系統(tǒng)工程學(xué)院 秦懷強(qiáng)
本文對Hadoop的架構(gòu)設(shè)計進(jìn)行了深入的研究,分別分析了它的兩個核心功能組件HDFS和MapReduce的系統(tǒng)架構(gòu)、實現(xiàn)原理和特點。
大數(shù)據(jù);Hadoop;偽分布式;HDFS
Hadoop的核心技術(shù):
對于Hadoop這一大數(shù)據(jù)處理平臺,需要了解的是它具有的兩個核心功能:分布式存儲和分布式計算。Hadoop分布式存儲是由其文件系統(tǒng)HDFS實現(xiàn)的,而其分布式計算則是由它自帶的計算框架MapReduce實現(xiàn)的[1]。
Hadoop在部署安裝時一般會由一臺服務(wù)器作為master,一臺服務(wù)器作為SecondaryNameNode,多臺服務(wù)器作為slave。
(1)Hadoop的核心之HDFS
Hadoop架構(gòu)中的master和slave在HDFS中分別扮演NameNode和DataNode的角色。一個超大文件在存儲到HDFS上時會由NameNode對其進(jìn)行分片(這里僅針對文件的內(nèi)容數(shù)據(jù)進(jìn)行分片),每一個分片是一個block,而每一個block的大小可以由用戶自己設(shè)定(一般設(shè)定為64MB)。一個文件的所有block會由NameNode決定將其存儲到哪個DataNode上。一個相同的block會存儲到不同的DataNode上(一般是3個),這種副本機(jī)制是為了保證數(shù)據(jù)的安全存儲,使其不易丟失[2]。Hadoop的HDFS由NameNode、Secondary NameNode和DataNode三部分組成,這三個部分我們都可以簡單的將其看做一臺普通的計算機(jī)。其中,在NameNode上主要存儲的數(shù)據(jù)是:文件的元數(shù)據(jù)、文件的分塊信息、文件的每個分塊與DataNode的映射信息。文件的元數(shù)據(jù)為:文件名、文件大小、文件存儲位置等除了文件內(nèi)容數(shù)據(jù)之外的所有文件數(shù)據(jù)。文件的分塊信息指的是文件被分成了多少塊。并且,這兩部分?jǐn)?shù)據(jù)是存儲在NameNode的磁盤上,文件名為fsimage,其會在HDFS啟動時被加載到NameNode的內(nèi)存中。而文件的每個分塊與DataNode的映射信息不會存儲在NameNode的磁盤上,而是在HDFS啟動時由DataNode的心跳機(jī)制上報給NameNode的內(nèi)存。在DataNode上存儲的數(shù)據(jù)是文件的內(nèi)容數(shù)據(jù),即每一個block。而且,文件的內(nèi)容數(shù)據(jù)都是存儲在DataNode的磁盤上。在啟動HDFS時,DataNode會向NameNode上報它自己存儲的所有的映射信息。對于NameNode來說,用戶的每一步操作并不會立馬修改其上的fsimage文件,而是生成一個edits文件用來存儲用戶的操作信息。edits文件的大小會有相應(yīng)的上限設(shè)置制(具體的可以自己設(shè)定,但一般設(shè)定為64MB),在edits文件大小達(dá)到上限或用戶操作時間超過了3600秒時,NameNode會將edits文件和fsimage文件同時傳給SecondaryNameNode,由SecondaryNameNode根據(jù)edits來修改fsimage(如果在Hadoop架構(gòu)中沒有設(shè)計SecondaryNameNode,則會由NameNode執(zhí)行這種合并機(jī)制。在架構(gòu)中設(shè)計SecondaryNameNode的原因是為了減少NameNode的負(fù)載,使其能更加高效的處理用戶的請求)。最后,再由SecondaryNameNode將修改后的fsimage回傳給NameNode。而且,在HDFS啟動期間,這些操作會依據(jù)用戶的操作和系統(tǒng)狀況不斷進(jìn)行。
(2)Hadoop的核心之MapReduce
Hadoop架構(gòu)中的master和slave在MapReduce中分別扮演ResourceManager和NodeManager的角色。其中ResourceManager會分配用戶寫好的MapReduce程序,NodeManager則會執(zhí)行MapReduce程序。
MapReduce計算框架是移動計算而不是移動數(shù)據(jù),即將程序移動到其需要的數(shù)據(jù)所在的那臺服務(wù)器上,而不是將程序需要的數(shù)據(jù)調(diào)用到程序最初存在的那臺服務(wù)器上。然后,我們在編寫MapReduce程序時,可以將其簡單的分為Map子程序、Reduce子程序和主程序。其中,Map子程序的作用是將輸入的數(shù)據(jù)依照某種目的構(gòu)造成鍵值對(一種數(shù)據(jù)存儲形式)輸出。而Reduce子程序則是根據(jù)某種目的來處理Map子程序的輸出鍵值對,最后再以鍵值對的形式輸出結(jié)果。主程序則是對框架程序的運行進(jìn)行一些相關(guān)的配置。MapReduce程序中的Map和Reduce子程序會被ResourceManager分發(fā)到Hadoop集群中的不同服務(wù)器上,MapReduce計算框架大體可以分成5個部分:split、Map、Shuffle、Reduce和output。其中,split、Map和Shuffle的前半部分在Map端(可以簡單的理解為一臺計算機(jī))執(zhí)行。而Shuffle的后半部分、Reduce和output在Reduce端執(zhí)行。在一個Hadoop集群中會存在多個Map端和Reduce端。MapReduce框架的工作流程為:首先,split部分將輸入數(shù)據(jù)(即在Map端上的block)以某種形式進(jìn)行分片。然后,分片會被遞交給Map子程序。Map子程序?qū)⒎制瑪?shù)據(jù)以鍵值對的形式輸出。然后,就到了Shuffle階段,這一階段指的是從Map子程序輸出到Reduce子程序輸入這一過程。這一階段有兩部分構(gòu)成,一部分在Map端,一部分在Reduce端,而且其操作主要有三個部分:分區(qū)、排序和將數(shù)據(jù)溢出到磁盤。最后,再由Reduce子程序?qū)?shù)據(jù)進(jìn)行處理,并將最后的結(jié)果以鍵值對的形式輸出。
Map子程序會在Map端擁有劃給它的一部分內(nèi)存(一般為64MB)來存儲它的輸出數(shù)據(jù)。當(dāng)這部分內(nèi)存被存滿的時候,這些數(shù)據(jù)會被轉(zhuǎn)存到Map端磁盤上。但在轉(zhuǎn)存的的過程中,partition程序(框架中自帶的,一般是執(zhí)行Hash模運算操作,當(dāng)然也可以自己定義)會對這部分?jǐn)?shù)據(jù)進(jìn)行分區(qū)。即將這些數(shù)據(jù)標(biāo)識上相應(yīng)分區(qū)的標(biāo)簽,并相鄰存儲。分區(qū)的結(jié)果是不同的分區(qū)數(shù)據(jù)最終會被分配給不同的Reduce子程序執(zhí)行。并且在執(zhí)行完分區(qū)操做后還會對這部分?jǐn)?shù)據(jù)進(jìn)行排序操作(一般是依照數(shù)據(jù)ASCII碼的大小來排序)。最后,這部分?jǐn)?shù)據(jù)會存儲到Map端磁盤上。上述操作只是一次Map子程序輸出數(shù)據(jù)存滿Map端劃分內(nèi)存的操作。多次這種操作還會導(dǎo)致combiner程序(框架中自帶,當(dāng)然用戶也可以自己定義)將Map端磁盤上的數(shù)據(jù)依據(jù)某種規(guī)則合并。當(dāng)Map子程序?qū)⒁粋€分片的輸入數(shù)據(jù)處理完后,Map端磁盤上的數(shù)據(jù)會被依照分區(qū)標(biāo)簽傳送給相應(yīng)的Reduce子程序執(zhí)行(當(dāng)然若Map程序在處理完一個分片數(shù)據(jù)的操作后Map端劃分內(nèi)存沒滿,則上述的操作都只是在Map端劃分內(nèi)存中執(zhí)行)。Reduce端也會有專門的劃分內(nèi)存(一般為64MB)來存儲Map端傳過來的數(shù)據(jù)。若一次傳輸?shù)臄?shù)據(jù)沒存滿這部分內(nèi)存,則這部分?jǐn)?shù)據(jù)直接交付給Reduce子程序處理,若在一次傳輸過程中這部分內(nèi)存滿了,則這部分?jǐn)?shù)據(jù)會被轉(zhuǎn)存到Reduce端磁盤上。在轉(zhuǎn)存的過程中會依據(jù)某種規(guī)則對數(shù)據(jù)執(zhí)行合并操作,然后,在Reduce端接收完Map端一次數(shù)據(jù)傳輸后,Reduce端磁盤上的數(shù)據(jù)會被交付給Reduce子程序來處理。以上內(nèi)容即是MapReduce框架中Shuffle部分的具體操作。
[1]文艾,王磊.高可用性的HDFS-Hadoop分布式文件系統(tǒng)深度實踐[M].清華大學(xué)出版社,2012:135-180.
[2]陳全,鄧倩妮.異構(gòu)環(huán)境下自適應(yīng)的MapReduce調(diào)度[J].計算機(jī)工程與科學(xué),2009,31:169-175.