|
Hadoop(MapReduce&HDFS) 1.學(xué)習(xí)目的(前言) 在從業(yè)了六年IT生涯里,做個實施顧問、業(yè)務(wù)顧問、BA需求分析師、項目經(jīng)理,現(xiàn)在重新定位自己,在新公司做起了開發(fā)顧問,雖然經(jīng)歷過很多轉(zhuǎn)折、跨度也有點(diǎn)大。但是抓住了機(jī)會,開始接觸大數(shù)據(jù)行業(yè)了。雖然目前工作中的都是使用Hive SQL進(jìn)行開發(fā),沒有涉及太多真正大數(shù)據(jù)的東西,但是覺得學(xué)習(xí)大數(shù)據(jù)還是很有必要,所以利用項目的空余時間對Hadoop進(jìn)行了學(xué)習(xí)整理,內(nèi)容可能對于現(xiàn)在的Hadoop來說已經(jīng)有點(diǎn)過時了,但是我覺得老知識還是根基,于是便有了以下的文章,用于以后自己備忘和要學(xué)習(xí)Hadoop的小伙伴一起學(xué)習(xí)進(jìn)步。 2.Hadoop核心思想 Hadoop是在分布式服務(wù)器集群上存儲海量數(shù)據(jù)并運(yùn)行分布式分析應(yīng)用的一個平臺,其核心部件是HDFS與MapReduce HDFS是一個分布式文件系統(tǒng):傳統(tǒng)文件系統(tǒng)的硬盤尋址慢,通過引入存放文件信息的服務(wù)器Namenode和實際存放數(shù)據(jù)的服務(wù)器Datanode進(jìn)行串接。對數(shù)據(jù)系統(tǒng)進(jìn)行分布式儲存讀取。 MapReduce是一個計算框架:MapReduce的核心思想是把計算任務(wù)分配給集群內(nèi)的服務(wù)器里執(zhí)行。通過對計算任務(wù)的拆分(Map計算\Reduce計算)再根據(jù)任務(wù)調(diào)度器(JobTracker)對任務(wù)進(jìn)行分布式計算。 3.HDFS文件系統(tǒng)和MapReduce計算框架在Hadoop生態(tài)圈中的應(yīng)用 HDFS負(fù)責(zé)Hadoop生態(tài)圈的數(shù)據(jù)存取工作 MapReduce負(fù)責(zé)Hadoop生態(tài)圈的數(shù)據(jù)運(yùn)算工作 Hadoop生態(tài)圈使用HDFS文件系統(tǒng)進(jìn)行存取數(shù)據(jù),數(shù)據(jù)被分散的保存在集群的各個服務(wù)器上,在計算數(shù)據(jù)時使用MapReduce結(jié)合HDFS進(jìn)行邏輯運(yùn)算取出數(shù)據(jù)。 4.Master/Slave的架構(gòu)理念 Hadoop使用(Master/Slave)主從架構(gòu)進(jìn)行分布式儲存和分布式計算。Master負(fù)責(zé)分配和管理任務(wù),Slave負(fù)責(zé)實際執(zhí)行任務(wù)。 MapReduce中裝載有JobTracker的服務(wù)器負(fù)責(zé)進(jìn)行Master任務(wù),裝載有TaskTracker的服務(wù)器負(fù)責(zé)進(jìn)行Slave任務(wù)。 HDFS中裝載有Namenode的服務(wù)器負(fù)責(zé)進(jìn)行Master任務(wù),裝載有Datanode的服務(wù)器負(fù)責(zé)進(jìn)行Slave任務(wù)。 5.HDFS&MapReduce的設(shè)計思路 HDFS: 將文件進(jìn)行切塊處理,再通過文件信息服務(wù)器Namenode存放切塊的文件信息存放地址,實際存放數(shù)據(jù)的服務(wù)器Datanode存在切塊后的數(shù)據(jù)。 系統(tǒng)默認(rèn):每個片塊大小為64M,以保證尋址速度;數(shù)據(jù)會寫入3個Datanode中,以保證更高的容錯性; HDFS還設(shè)計了Secondary Namenode來更新Namenode,以避免日志文件過大 HDFS Client幫助Namenode對寫入讀取數(shù)據(jù)進(jìn)行預(yù)處理,進(jìn)行文件的分塊與發(fā)送讀取操作。Namenode負(fù)責(zé)為數(shù)據(jù)任務(wù)尋址 MapReduce: 通過JobClient生成任務(wù)運(yùn)行文件,并在JobTracker進(jìn)行調(diào)度指派TaskTracker完成任務(wù)。 JobTracker分為把任務(wù)文件進(jìn)行分解并派送到TaskTracker的程序JobinProgress和執(zhí)行調(diào)度器的TaskScheduler JobinProgress把作業(yè)分解成Map計算和Reduce計算并放置到TaskTracker服務(wù)器中 6.HDFS&MapReduce組件介紹 HDFS: Namenode(Master):管理著每個文件中各個塊所在的數(shù)據(jù)節(jié)點(diǎn)的位置信息 Namespace image:記錄每個文件的存在位置信息 Edit log:記錄每個文件的位置移動信息 Datanode(Slave):記錄著服務(wù)器內(nèi)所儲存的數(shù)據(jù)塊的列表 Secondary Namenode:更新并備份Namenode HDFS Client:進(jìn)行文件的分塊與文件的發(fā)送讀取 MapReduce: JobClient:用于把用戶的作業(yè)任務(wù)生成Job的運(yùn)行包,并存放到HDFS中。 JobinProgress:把Job運(yùn)行包分解成MapTask和ReduceTask并存放于TaskTracker中 JobTracker(Master):進(jìn)行調(diào)度管理TaskTracker執(zhí)行任務(wù) TaskTracker(Slave):執(zhí)行分配下來的Map計算或Reduce計算任務(wù) 7.Hadoop運(yùn)行機(jī)制 HDFS: Namenode使用鏡像文件(Namespace image)和操作日志文件(edit log)對數(shù)據(jù)進(jìn)行記錄。(保存在緩存和磁盤中) Secondary Namenode進(jìn)行更新時的操作: 1.在Namenode創(chuàng)建一個新的操作日志,將新的操作記錄寫入到新的操作日志中; 2.將Namenode的鏡像文件和操作日志拷貝到Secondary Namenode中; 3.在Secondary Namenode中讀取鏡像文件到內(nèi)存,并執(zhí)行日志文件中的所有操作,生產(chǎn)新的鏡像文件; 4.把Secondary Namenode中創(chuàng)建的鏡像文件拷貝到Namenode中; 5.Namenode中使用新的鏡像文件和操作日志替代原來的文件; 存數(shù)據(jù): 1.HDFS Client對文件分塊并向Namenode發(fā)送寫數(shù)據(jù)請求 2.Namenode把block信息記錄下來,并返回可寫入的Datanode 3.HDFS Client向指定的Datanode傳送數(shù)據(jù) 4.傳送成功后,Datanode會向Namenode和HDFS Client發(fā)送成功通知 讀數(shù)據(jù): 1.HDFS Client從Namenode中獲取文件塊的位置 2.HDFS Client根據(jù)Namenode返回的文件信息去Datanode相關(guān)位置中讀取 MapReduce: 通過JobClient把用戶的作業(yè)任務(wù)轉(zhuǎn)換成job.xml、job.jar、job.split,適合JobTracker執(zhí)行的文件 1.job.xml文件記錄了Job的詳細(xì)配置信息 2.job.jar保存了用戶定義的關(guān)于job的map、reduce操縱 3.job.split保存了job任務(wù)的切片信息 JobClient會為作業(yè)向JobTracker申請Jobid,并以Jobid命名把xml、jar、split文件放置進(jìn)HDFS中 JobinProgress會把JobClient創(chuàng)建的Job拷貝到JobTracker本地文件系統(tǒng),并創(chuàng)建JobStatus和Job的mapTask、reduceTask隊列來跟蹤Job的狀態(tài)信息。 JobTracker默認(rèn)執(zhí)行一下調(diào)度法則 1.先進(jìn)先出:集群內(nèi)的資源統(tǒng)一進(jìn)行使用,執(zhí)行先進(jìn)隊列先執(zhí)行的原則。 2.公平調(diào)度:按用戶分配集群內(nèi)的資源,每個用戶只能在指定的資源內(nèi)運(yùn)行調(diào)度。 3.隊列調(diào)度:可以設(shè)置多個隊列,每個隊列都可以進(jìn)行置頂?shù)馁Y源調(diào)度 TaskTracker向JobTracker發(fā)送心跳報告及執(zhí)行命令 8.MapReduce集群的配置 服務(wù)器 守護(hù)進(jìn)程 說明 server1 namenode namenode節(jié)點(diǎn) server2 jobtracker 任務(wù)主節(jié)點(diǎn) server3 secondary namenode secondary namenode dserver1 datanode tasktracker 數(shù)據(jù)節(jié)點(diǎn) dserver2 datanode tasktracker 數(shù)據(jù)節(jié)點(diǎn) dsdrver3 datanode tasktracker 數(shù)據(jù)節(jié)點(diǎn) 后感: 在寫這篇文章的時候,知識點(diǎn)不斷在更新(ps:甚至大v們對同一個事情的理解也有不太一致的地方,再ps:上述文章內(nèi)容完全是小粉的個人理解),甚至連文章架構(gòu)也改了很多次。但是對于學(xué)習(xí)來說,我覺得這個是一件好事兒,建議也在學(xué)習(xí)hadoop的小伙伴也可以對自己的知識進(jìn)行整理學(xué)習(xí),有自己的理解。 |
|
|