?
Hadoop
?
Hadoop是分布式的系統(tǒng)架構
1.Hadoop組成:
Hadoop = hdfs(存儲) + mapreduce(計算) +
yarn(資源管理) + common(工具包)
1-1掖蛤、分布式存儲系統(tǒng)HDFS (Hadoop Distributed File System )
?分布式存儲系統(tǒng)
?提供了 高可靠性、高擴展性和高吞吐率的數(shù)據(jù)存儲服務
1-2井厌、分布式計算框架MapReduce
?分布式計算框架(計算向數(shù)據(jù)移動)
具有 易于編程蚓庭、高容錯性和高擴展性等優(yōu)點致讥。
1-3、分布式資源管理框架YARN(Yet Another Resource Management)
負責集群資源的管理和調(diào)度
2.分布式文件存儲系統(tǒng)HDFS
2-1彪置、HDFS是什么拄踪?
HDFS是Hadoop分布式文件存儲系統(tǒng)
分布式存儲系統(tǒng)HDFS (Hadoop Distributed File System)
主要解決大數(shù)據(jù)的存儲問題蝇恶。
HDFS的功能模塊及原理詳解
2-2-1拳魁、HDFS 數(shù)據(jù)存儲單元(block)
--文件被切分成固定大小的數(shù)據(jù)塊block
默認數(shù)據(jù)塊大小為128MB (hadoop2.x),可自定義配置
若文件大小不到128MB 撮弧,則單獨存成一個block
一個文件存儲方式
按大小被切分成若干個block 潘懊,存儲到不同節(jié)點上
默認情況下每個block都有3個副本
Block大小和副本數(shù)通過Client端上傳文件時設置,文件上傳成功后副本數(shù)可以變更贿衍,Block Size不可變更
hdfs存儲模型:字節(jié)
文件線性切割成塊(Block):偏移量 offset (byte)
Block分散存儲在集群節(jié)點中
單一文件Block大小一致授舟,文件與文件可以不一致
Block可以設置副本數(shù),副本分散在不同節(jié)點中
副本數(shù)不要超過節(jié)點數(shù)量
文件上傳可以設置Block大小和副本數(shù)
已上傳的文件Block副本數(shù)可以調(diào)整贸辈,大小不變
只支持一次寫入多次讀取释树,同一時刻只有一個寫入者
可以append追加數(shù)據(jù)
2-2-2、NameNode(簡稱NN)
2-2-2-1擎淤、NameNode主要功能:
接受客戶端的讀/寫服務
收集DataNode匯報的Block列表信息
2-2-2-2奢啥、基于內(nèi)存存儲:不會和磁盤發(fā)生交換
只存在內(nèi)存中
持久化
2-2-2-3、NameNode保存metadata信息:
文件owership(歸屬)和permissions(權限)
文件大小嘴拢,時間
(Block列表:Block偏移量)桩盲,位置信息
Block保存在哪個DataNode信息(由DataNode啟動時上報,不保存在磁盤)
2-2-2-4、NameNode持久化
NameNode的metadate信息在啟動后會加載到內(nèi)存
metadata存儲到磁盤文件名為”fsimage”
Block的位置信息不會保存到fsimage
edits記錄對metadata的操作日志
–? fsimage保存了最新的元數(shù)據(jù)檢查點,類似快照席吴。
-? editslog保存自最新檢查點后的元信息變化赌结,從最新檢查點后,hadoop將對每個文件的操作都保存在edits中孝冒〖硪Γ客戶端修改文件時候,先寫到editlog庄涡,成功后才更新內(nèi)存中的metadata信息伤靠。
Metadata = fsimage + editslog
2-2-4、DataNode(DN)
本地磁盤目錄存儲數(shù)據(jù)(Block)啼染,文件形式
同時存儲Block的元數(shù)據(jù)(md5值)信息文件
啟動DN進程的時候會向NameNode匯報block信息
通過向NN發(fā)送心跳保持與其聯(lián)系(3秒一次)宴合,如果NN 10分鐘沒有收到DN的心跳,則認為其已經(jīng)lost迹鹅,并copy其上的block到其它DN
2-2-5卦洽、SecondaryNameNode(SNN)
–? 它的主要工作是幫助NN合并edits log文件,減少NN啟動時間,它不是NN的備份(但可以做備份)斜棚。
–? SNN執(zhí)行合并時間和機制
?A阀蒂、根據(jù)配置文件設置的時間間隔fs.checkpoint.period默認3600秒该窗。
?B、根據(jù)配置文件設置edits log大小 fs.checkpoint.size 規(guī)定edits文件的最大值默認是64MB
2-2-6蚤霞、SecondaryNameNode SNN合并流程
?? 首先是NN中的Fsimage和edits文件通過網(wǎng)絡拷貝酗失,到達SNN服務器中,拷貝的同時昧绣,用戶的實時在操作數(shù)據(jù)规肴,那么NN中就會從新生成一個edits來記錄用戶的操作,而另一邊的SNN將拷貝過來的edits和fsimage進行合并夜畴,合并之后就替換NN中的fsimage拖刃。之后NN根據(jù)fsimage進行操作(當然每隔一段時間就進行替換合并,循環(huán))贪绘。當然新的edits與合并之后傳輸過來的fsimage會在下一次時間內(nèi)又進行合并兑牡。
2-2-6、Block的副本放置策略
–? 第一個副本:放置在上傳文件的DN税灌;如果是集群外提交均函,則隨機挑選一臺磁盤不太滿,CPU不太忙的節(jié)點菱涤。
–? 第二個副本:放置在于第一個副本不同的機架的節(jié)點上苞也。
–? 第三個副本:與第二個副本相同機架的不同節(jié)點。
–? 更多副本:隨機節(jié)點
集群內(nèi)提交:
[if !vml]
[endif]
2-2-7狸窘、HDFS讀寫流程
2-2-7-1墩朦、寫文件流程
HDFS寫流程
Client:
切分文件Block
按Block線性和NN獲取DN列表(副本數(shù))
驗證DN列表后以更小的單位(packet)流式傳輸數(shù)據(jù)
各節(jié)點,兩兩通信確定可用
Block傳輸結束后:
DN向NN匯報Block信息
DN向Client匯報完成
Client向NN匯報完成
獲取下一個Block存放的DN列表
……………..
最終Client匯報完成
NN會在寫流程更新文件狀態(tài)
2-2-7-2翻擒、讀文件過程
HDFS讀流程
Client:
和NN獲取一部分Block副本位置列表
線性和DN獲取Block氓涣,最終合并為一個文件
在Block副本列表中按距離擇優(yōu)選取
2-2-8、HDFS文件權限?
與Linux文件權限類似
r: read; w:write; x:execute
權限x對于文件忽略陋气,對于文件夾表示是否允許訪問其內(nèi)容
如果Linux系統(tǒng)用戶zhangsan使用hadoop命令創(chuàng)建一個文件劳吠,那么這個文件在HDFS中owner就是zhangsan。
HDFS的權限目的:阻止好人錯錯事巩趁,而不是阻止壞人做壞事痒玩。HDFS相信,你告訴我你是誰议慰,我就認為你是誰蠢古。
2-2-9、安全模式
namenode啟動的時候别凹,首先將映像文件(fsimage)載入內(nèi)存草讶,并執(zhí)行編輯日志(edits)中的各項操作。
一旦在內(nèi)存中成功建立文件系統(tǒng)元數(shù)據(jù)的映射炉菲,則創(chuàng)建一個新的fsimage文件(這個操作不需要SecondaryNameNode)和一個空的編輯日志堕战。
此刻namenode運行在安全模式坤溃。即namenode的文件系統(tǒng)對于客服端來說是只讀的。(顯示目錄嘱丢,顯示文件內(nèi)容等薪介。寫、刪除越驻、重命名都會失敗)汁政。
在此階段Namenode收集各個datanode的報告,當數(shù)據(jù)塊達到最小副本數(shù)以上時伐谈,會被認為是“安全”的烂完, 在一定比例(可設置)的數(shù)據(jù)塊被確定為“安全”后试疙,再過若干時間诵棵,安全模式結束
當檢測到副本數(shù)不足的數(shù)據(jù)塊時,該塊會被復制直到達到最小副本數(shù)祝旷,系統(tǒng)中數(shù)據(jù)塊的位置并不是由namenode維護的履澳,而是以塊列表形式存儲在datanode中。
2-3怀跛、HDFS的優(yōu)缺點
2-3-1優(yōu)點:
高容錯性
數(shù)據(jù)自動保存多個副本
副本丟失后距贷,自動恢復
適合批處理
移動計算而非數(shù)據(jù)
數(shù)據(jù)位置暴露給計算框架(Block偏移量)
適合大數(shù)據(jù)處理
GB 、TB 吻谋、甚至PB 級數(shù)據(jù)
百萬規(guī)模以上的文件數(shù)量
10K+ 節(jié)點
[if !supportLists]– [endif]可構建在廉價機器上
通過多副本提高可靠性
提供了容錯和恢復機制
2-3-2缺點:
[if !supportLists]-??[endif]低延遲高數(shù)據(jù)吞吐訪問問題
?比如支持秒級別反應忠蝗,不支持毫秒級
?延遲與高吞吐率問題(吞吐量大但有限制于其延遲)
小文件存取
占用NameNode 大量內(nèi)存
尋道時間超過讀取時間
[if !supportLists]-??[endif]并發(fā)寫入、文件隨機修改
一個文件只能有一個寫者
僅支持append