hadoop學(xué)習(xí)筆記(一)

一、HDFS簡介

1.1Hadoop2介紹

hadoop1是由HDFS和MapReduce組成,hadoop2由HDFS、YARN、MapReduce和其他的計算框架組成。

(1)核心

HDFS——用于海量數(shù)據(jù)存儲;MapReduce——分布式計算;YARN——資源管理系統(tǒng)。

(2)改進(jìn)

YARN——運行更多種類框架;

NameNode HA——同時啟動2個NameNode。其中一個處于工作(Active)狀態(tài),另一個處于隨時待命(Standby)狀態(tài);

HDFS federation——由多個Namenode和一組Datanode組成,每一個Datanode會為多個塊池(block pool)存儲塊。

Hadoop RPC序列化擴(kuò)展性——將數(shù)據(jù)類型模塊從RPC中獨立出來,成為一個獨立的可插拔模塊

1.2HDFS概述

HDFS是一個分布式文件系統(tǒng),具有高容錯、高可靠、高可擴(kuò)展性、高吞吐率的特點。它可以部署在廉價的通用硬件上,適合需要處理海量數(shù)據(jù)集的應(yīng)用程序。

(1)主要特性

支持超大文件——幾百M、GB甚至TB級的數(shù)據(jù)文件

檢測和快速應(yīng)對硬件故障——HDFS的檢測和冗余機(jī)制很好克服了大量通用硬件平臺上的硬件故障問題

流式數(shù)據(jù)訪問——HDFS更關(guān)注數(shù)據(jù)訪問的高吞吐量

簡化一致性模型——一次寫入、多次讀取的訪問模式

(2)HDFS不適合以下場景

低延遲數(shù)據(jù)訪問;大量的小文件;多用戶寫入文件、修改文件。?

(3)HDFS體系結(jié)構(gòu)

由NameNode和DataNode構(gòu)成。其中:

①NameNode上保存著HDFS的名字空間,任何對文件系統(tǒng)元數(shù)據(jù)產(chǎn)生修改的操作都作用于NameNode;

②DataNode將HDFS數(shù)據(jù)以文件的形式存儲在本地文件系統(tǒng)中。

(4)數(shù)據(jù)塊

數(shù)據(jù)塊是HDFS的文件存儲處理單元,在Hadoop 2中默認(rèn)大小為128MB,可根據(jù)業(yè)務(wù)情況進(jìn)行配置。

優(yōu)點:HDFS可以保存比存儲節(jié)點單一磁盤大的文件;簡化了存儲子系統(tǒng)、存儲管理,并消除分布式管理文件元數(shù)據(jù)的復(fù)雜性;方便容錯,有利于數(shù)據(jù)復(fù)制。

1.3HDFS讀寫流程

(1)讀流程

①客戶端向遠(yuǎn)程NameNode發(fā)送RPC請求;

②NameNode視情況返回文件部分或全部的block列表,對于每個block,Namenode都會返回有該block拷貝的DataNode地址;?

③客戶端開發(fā)庫Client會選取離客戶端最接近的DataNode來讀取block。如果客戶端本身就是DataNode,那么將從本地直接獲取數(shù)據(jù);

?④讀取完當(dāng)前block的數(shù)據(jù)后,關(guān)閉與當(dāng)前的DataNode連接,并為讀取下一個block尋找最佳的DataNode;

⑤ 當(dāng)讀完列表的block后,且文件讀取還沒有結(jié)束,客戶端開發(fā)庫會繼續(xù)向Namenode獲取下一批的block列表;

⑥讀取完一個block都會進(jìn)行校驗,如果讀取datanode時出現(xiàn)錯誤,客戶端會通知Namenode,然后再從下一個擁有該block拷貝的datanode繼續(xù)讀取。

(2)寫流程

①使用HDFS提供的客戶端開發(fā)庫Client,向遠(yuǎn)程的Namenode發(fā)起RPC請求;

②Namenode會檢查要創(chuàng)建的文件是否已經(jīng)存在,創(chuàng)建者是否有權(quán)限進(jìn)行操作,成功則會為文件創(chuàng)建一個記錄,否則會讓客戶端拋出異常;

③當(dāng)客戶端開始寫入文件的時候,開發(fā)庫會將文件切分成多個packets,并在內(nèi)部以數(shù)據(jù)隊列"data queue"的形式管理這些packets,并向Namenode申請新的blocks,獲取用來存儲replicas的合適的datanodes列表,列表的大小根據(jù)在Namenode中對replication的設(shè)置而定;

④開始以pipeline(管道)的形式將packet寫入所有的replicas中。開發(fā)庫把packet以流的方式寫入第一個datanode,該datanode把該packet存儲之后,再將其傳遞給在此pipeline中的下一個datanode,直到最后一個datanode,這種寫數(shù)據(jù)的方式呈流水線的形式;

⑤最后一個datanode成功存儲之后會返回一個ack packet,在pipeline里傳遞至客戶端,在客戶端的開發(fā)庫內(nèi)部維護(hù)著"ack queue",成功收到datanode返回的ack packet后會從"ack queue"移除相應(yīng)的packet;

⑥如果傳輸過程中,有某個datanode出現(xiàn)了故障,那么當(dāng)前的pipeline會被關(guān)閉,出現(xiàn)故障的datanode會從當(dāng)前的pipeline中移除,剩余的block會繼續(xù)剩下的datanode中繼續(xù)以pipeline的形式傳輸,同時Namenode會分配一個新的datanode,保持replicas設(shè)定的數(shù)量。

(3)創(chuàng)建子路徑流程:通過namenode進(jìn)行創(chuàng)建、新加記錄。?

(4)刪除數(shù)據(jù)流程:客戶端與namenode交互,namenode指定datanode刪除相應(yīng)的block。

二、YARN原理介紹

2.1 YARN產(chǎn)生背景

Hadoop 1.X缺陷:

①擴(kuò)展性差:JobTracker同時兼?zhèn)淞速Y源管理和作業(yè)控制兩個功能,嚴(yán)重制約了整個集群的擴(kuò)展性;

②可靠性差:JobTracker存在單點故障,JobTracker出現(xiàn)問題將導(dǎo)致整個集群不可用;

③資源利用率低:基于槽位資源分布模式,無法有效利用各種資源;

④無法支持多種計算框架:Hadoop 1支持內(nèi)存計算、流式計算、迭代式計算等多種計算框架并存的情況。

多種計算框架優(yōu)點:資源利用率高;運維成本低;數(shù)據(jù)共享。

2.2 YARN基本架構(gòu)

YARN是一種Hadoop資源管理器。它是一個通用的資源管理系統(tǒng),可為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度,它的引入為集群在利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來了巨大好處。

(一)應(yīng)用場景

長應(yīng)用程序:不出意外,永不終止運行的應(yīng)用程序,通常是一些服務(wù),比如Storm Service(主要包括Nimbus和Supervisor兩類服務(wù)),HBase Service(包括Hmaster和RegionServer兩類服務(wù))等;

短應(yīng)用程序:一定時間內(nèi)(可能是秒級、分鐘級或小時級,盡管天級別或者更長時間的也存在,但非常少)可運行完成并正常退出的應(yīng)用程序。

(二)結(jié)構(gòu)圖

YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等幾個組件構(gòu)成。YARN總體上仍然是Master/Slave結(jié)構(gòu)。ResourceManager為Master,NodeManager為Slave。ResourceManager負(fù)責(zé)對各個NodeManager上的資源進(jìn)行統(tǒng)一管理和調(diào)度。當(dāng)用戶提交一個應(yīng)用程序時,需要提供一個用以跟蹤和管理這個程序的ApplicationMaster,它負(fù)責(zé)向ResourceManager申請資源,并要求NodeManger啟動可以占用一定資源的任務(wù)。由于不同的ApplicationMaster被分布到不同的節(jié)點上,因此它們之間不會相互影響。

①ResourceManager

作為一個全局的資源管理器,負(fù)責(zé)整個系統(tǒng)的資源管理和分配,主要由調(diào)度器和應(yīng)用程序管理器兩個組件構(gòu)成。

調(diào)度器:將系統(tǒng)中的資源分配給各個正在運行的應(yīng)用程序,可插拔組件,用戶可根據(jù)需要設(shè)計新的調(diào)度器。

應(yīng)用程序管理器:負(fù)責(zé)管理整個系統(tǒng)中所有的應(yīng)用程序,包括應(yīng)用程序提交、與調(diào)度器協(xié)商資源以啟動ApplicationMaster、監(jiān)控ApplicationMaster運行狀態(tài)并在失敗時重新啟動它等。

②ApplicationMaster

用戶提交的每個應(yīng)用程序均包含1個ApplicationMaster,主要功能包括與ResourceManager調(diào)度器協(xié)商以獲取資源,將得到的任務(wù)進(jìn)一步分配給內(nèi)部的任務(wù)。負(fù)責(zé)與NodeManager通信以啟動/停止任務(wù)、監(jiān)控所有任務(wù)運行狀態(tài)并在任務(wù)運行失敗時重新為任務(wù)申請資源以重啟任務(wù)等。

③NodeManager

作為每個節(jié)點上的資源和任務(wù)管理器,定時向ResourceManager匯報本節(jié)點上的資源使用情況和各個Container的運行狀態(tài),還接收并處理來自ApplicationMaster的Container啟動/停止等各種請求。

④Container

它是YARN中的資源抽象,它封裝了某個節(jié)點上的多維度資源,如內(nèi)存、CPU、磁盤、網(wǎng)絡(luò)等,當(dāng)ApplicationMaster向ResourceManager申請資源時,返回的資源便是用Container表示的。YARN會為每個任務(wù)分配一個Container,且該任務(wù)只能使用該Container中描述的資源。

(三)流程圖

①用戶向YARN中提交應(yīng)用程序,其中包括ApplicationMaster程序,啟動ApplicationMaster的命令,用戶程序等;

②ResourceManger為該程序分配第一個Container,并與對應(yīng)的NodeManger通訊,要求它在這個Container中啟動應(yīng)用程序的ApplicationMaste;

③ApplicationMaste首先向ResourceMange注冊,這樣用戶可以直接通過ResourceMange查看應(yīng)用程序的運行狀態(tài),然后將為各個任務(wù)申請資源,并監(jiān)控它的運行狀態(tài),直到運行結(jié)束,重復(fù)4-7的步驟;

④ApplicationMaste采用輪詢的方式通過RPC協(xié)議向NodeManger申請和領(lǐng)取資源;

⑤一旦ApplicationMaste申請到資源后,便與對應(yīng)的NodeManger通訊,要求它啟動任務(wù);

⑥NodeManger為任務(wù)設(shè)置好運行環(huán)境(包括環(huán)境變量、JAR包、二進(jìn)制程序等)后,將任務(wù)啟動命令寫到一個腳本中,并通過運行該腳本啟動任務(wù);

⑦各個任務(wù)通過某個RPC協(xié)議向ApplicationMaste匯報自己的狀態(tài)和進(jìn)度,以讓ApplicationMaste隨時掌握各個任務(wù)的運行狀態(tài),從而可以在任務(wù)失敗的時候重新啟動任務(wù);

⑧應(yīng)用程序運行完成后,ApplicationMaste向ResourceManger注銷并關(guān)閉自己。

三、MapReduce原理介紹

3.1 MapReduce介紹

MapReduce是由Google公司研究提出的一種面向大規(guī)模數(shù)據(jù)處理的并行計算模型和方法,是Hadoop面向大數(shù)據(jù)并行處理的計算模型、框架和平臺。

MapReduce執(zhí)行流:

3.2MapReduce2運行原理

基于YARN的Mapreduce2工作流程:

(一)具體流程為:

1.客戶端向集群提交作業(yè);

2.Job從ResourceManager獲取新的作業(yè)應(yīng)用程序ID;

3.客戶端檢查作業(yè)的輸出情況,計算輸入分片,并將作業(yè)jar包、配置、分片信息等作業(yè)資源復(fù)制到HDFS;

4.Job向ResourceManager提交作業(yè);

5.ResourceManager接收到作業(yè)后,將作業(yè)請求傳遞給調(diào)度器,調(diào)度器根據(jù)作業(yè)信息為ResourceManager分配一個container,然后ResourceManager在NodeManager的管理下,在container中啟動一個ApplicationMaster進(jìn)程;

6.ApplicationMaster對作業(yè)進(jìn)行初始化,并保持對作業(yè)的跟蹤,判斷作業(yè)是否完成;

7.ApplicationMaster接受來自于HDFS的分片信息,確定Map的數(shù)量,一個分片信息對應(yīng)一個Map,而Reduce數(shù)量則可以在客戶端中設(shè)置;

8.ApplicationMaster為本次作業(yè)的Map和Reduce以輪詢的方式向ResourceManager申請container;

9.ApplicationMaster獲取到container后,與NodeManager進(jìn)行通訊啟動container;

10.任務(wù)開始前將任務(wù)需要的資源(jar包、配置和分布式緩存文件等)本地化;

11.container啟動Map、Reduce任務(wù)。

(二)MapReduce2進(jìn)度狀態(tài)更新:Map、Reduce任務(wù)向ApplicationMaster發(fā)送進(jìn)度狀況。

3.3 shuffle及排序

Mapreduce的map端輸出作為輸入傳遞給reduce端,并按鍵排序的過程稱為shuffle。

shuffle流程圖:

Map階段:

1.每個map存在一個環(huán)形內(nèi)存緩沖區(qū)(可以人為設(shè)置,默認(rèn)為100M),若達(dá)到閾值(緩沖區(qū)大小的80%),后臺內(nèi)容溢出至磁盤。寫過程以輪詢方式將緩沖區(qū)內(nèi)容寫入特定路徑。

其中:

partition——map端寫入磁盤之前,線程首先根據(jù)reduce劃分相應(yīng)分區(qū)。每個分區(qū)中后臺線程按照鍵排序。

combiner——相當(dāng)于本地的reduce,可減少磁盤I/O或網(wǎng)絡(luò)I/O。

2.map端可能會有很多的溢出文件,其任務(wù)完成前生成已經(jīng)分區(qū)并排序的文件。默認(rèn)map輸出不進(jìn)行壓縮,不過可以設(shè)置數(shù)據(jù)壓縮。

Reduce階段:

Reduce通過http方式獲得map端輸出數(shù)據(jù)。若reduce接受的數(shù)據(jù)量相當(dāng)小,則復(fù)制至reduce的緩沖區(qū)(可設(shè)置)中,否則復(fù)制至磁盤,并進(jìn)行所有map輸出數(shù)據(jù)的合并排序。最后對排好序的數(shù)據(jù)進(jìn)行處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容