hadoop學習筆記(一)

一桥嗤、HDFS簡介

1.1Hadoop2介紹

hadoop1是由HDFS和MapReduce組成毯辅,hadoop2由HDFS埂伦、YARN、MapReduce和其他的計算框架組成思恐。

(1)核心

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

(2)改進

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

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

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

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

1.2HDFS概述

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

(1)主要特性

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

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

流式數(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中默認大小為128MB填抬,可根據(jù)業(yè)務情況進行配置。

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

1.3HDFS讀寫流程

(1)讀流程

①客戶端向遠程NameNode發(fā)送RPC請求性置;

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

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

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

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

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

(2)寫流程

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

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

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

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

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

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

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

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

二谊囚、YARN原理介紹

2.1 YARN產(chǎn)生背景

Hadoop 1.X缺陷:

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

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

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

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

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

2.2 YARN基本架構(gòu)

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

(一)應用場景

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

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

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

YARN主要由ResourceManager梆奈、NodeManager、ApplicationMaster和Container等幾個組件構(gòu)成称开。YARN總體上仍然是Master/Slave結(jié)構(gòu)亩钟。ResourceManager為Master,NodeManager為Slave鳖轰。ResourceManager負責對各個NodeManager上的資源進行統(tǒng)一管理和調(diào)度清酥。當用戶提交一個應用程序時,需要提供一個用以跟蹤和管理這個程序的ApplicationMaster蕴侣,它負責向ResourceManager申請資源焰轻,并要求NodeManger啟動可以占用一定資源的任務。由于不同的ApplicationMaster被分布到不同的節(jié)點上昆雀,因此它們之間不會相互影響辱志。

①ResourceManager

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

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

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

②ApplicationMaster

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

③NodeManager

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

④Container

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

(三)流程圖

①用戶向YARN中提交應用程序稚字,其中包括ApplicationMaster程序饲宿,啟動ApplicationMaster的命令,用戶程序等胆描;

②ResourceManger為該程序分配第一個Container褒傅,并與對應的NodeManger通訊,要求它在這個Container中啟動應用程序的ApplicationMaste袄友;

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

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

⑤一旦ApplicationMaste申請到資源后饶碘,便與對應的NodeManger通訊,要求它啟動任務馒吴;

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

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

⑧應用程序運行完成后歹河,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è)應用程序ID谬墙;

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

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

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

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

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

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

9.ApplicationMaster獲取到container后,與NodeManager進行通訊啟動container撒穷;

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

11.container啟動Map端礼、Reduce任務禽笑。

(二)MapReduce2進度狀態(tài)更新:Map、Reduce任務向ApplicationMaster發(fā)送進度狀況蛤奥。

3.3 shuffle及排序

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

shuffle流程圖:

Map階段:

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

其中:

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

combiner——相當于本地的reduce谢肾,可減少磁盤I/O或網(wǎng)絡I/O腕侄。

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

Reduce階段:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酪穿,一起剝皮案震驚了整個濱河市凳干,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌被济,老刑警劉巖救赐,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異只磷,居然都是意外死亡经磅,警方通過查閱死者的電腦和手機少欺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馋贤,“玉大人赞别,你說我怎么就攤上這事∨渑遥” “怎么了仿滔?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長犹芹。 經(jīng)常有香客問我崎页,道長,這世上最難降的妖魔是什么腰埂? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任飒焦,我火速辦了婚禮,結(jié)果婚禮上屿笼,老公的妹妹穿的比我還像新娘牺荠。我一直安慰自己,他們只是感情好驴一,可當我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布休雌。 她就那樣靜靜地躺著,像睡著了一般肝断。 火紅的嫁衣襯著肌膚如雪杈曲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天胸懈,我揣著相機與錄音担扑,去河邊找鬼。 笑死趣钱,一個胖子當著我的面吹牛涌献,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播羔挡,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼洁奈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绞灼?” 一聲冷哼從身側(cè)響起利术,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎低矮,沒想到半個月后印叁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年轮蜕,在試婚紗的時候發(fā)現(xiàn)自己被綠了昨悼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡跃洛,死狀恐怖率触,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汇竭,我是刑警寧澤葱蝗,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站细燎,受9級特大地震影響两曼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玻驻,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一悼凑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧璧瞬,春花似錦户辫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捺萌。三九已至档冬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桃纯,已是汗流浹背酷誓。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留态坦,地道東北人盐数。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像伞梯,于是被迫代替她去往敵國和親玫氢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容