大數據筆記(二):HDFS原理知識
HDFS原理知識
一、前言
博主語錄:一文精講一個知識點,多了你記不住,一句廢話都沒有
經典語錄:張牙舞爪的人,往往是脆弱的。因為真正強大的人,是自信的,自信就會溫和,溫和就會堅定
二、思考
分布式文件系統(tǒng)那么多 為什么hadoop項目中還要開發(fā)一個hdfs文件系統(tǒng)?
三、理論知識點
存儲模型
架構設計
角色功能
元數據持久化
安全模式 副
本放置策略
讀寫流程
四、存儲模型
文件線性按字節(jié)切割成塊(block),具有offset,id
文件與文件的block大小可以不一樣
一個文件除最后一個block,其他block大小一致
block的大小依據硬件的I/O特性調整
block被分散存放在集群的節(jié)點中,具有l(wèi)ocation
Block具有副本(replication),沒有主從概念,副本不能出現(xiàn)在同一個節(jié)點
副本是滿足可靠性和性能的關鍵
文件上傳可以指定block大小和副本數,上傳后只能修改副本數
一次寫入多次讀取,不支持修改
支持追加數據
五、?架構設計
HDFS是一個主從(Master/Slaves)架構
由一個NameNode和一些DataNode組成
面向文件包含:文件數據(data)和文件元數據(metadata)
NameNode負責存儲和管理文件元數據,并維護了一個層次型的文件目錄樹
DataNode負責存儲文件數據(block塊),并提供block的讀寫
DataNode與NameNode維持心跳,并匯報自己持有的block信息
Client和NameNode交互文件元數據和DataNode交互文件block數據
六、角色功能
NameNode
完全基于內存存儲文件元數據、目錄結構、文件block的映射
需要持久化方案保證數據可靠性
提供副本放置策略
DataNode
基于本地磁盤存儲block(文件的形式)
并保存block的校驗和數據保證block的可靠性
與NameNode保持心跳,匯報block列表狀態(tài)
七、元數據持久化
任何對文件系統(tǒng)元數據產生修改的操作,Namenode都會使用一種稱為EditLog的事務日志記錄下來
使用FsImage存儲內存所有的元數據狀態(tài)
使用本地磁盤保存EditLog和FsImage
EditLog具有完整性,數據丟失少,但恢復速度慢,并有體積膨脹風險
FsImage具有恢復速度快,體積與內存數據相當,但不能實時保存,數據丟失多
NameNode使用了FsImage+EditLog整合的方案:
滾動將增量的EditLog更新到FsImage,以保證更近時點的FsImage和更小的EditLog體積
八、安全模式
HDFS搭建時會格式化,格式化操作會產生一個空的FsImage
當Namenode啟動時,它從硬盤中讀取Editlog和FsImage
將所有Editlog中的事務作用在內存中的FsImage上
并將這個新版本的FsImage從內存中保存到本地磁盤上
然后刪除舊的Editlog,因為這個舊的Editlog的事務都已經作用在FsImage上了
Namenode啟動后會進入一個稱為安全模式的特殊狀態(tài)。
處于安全模式的Namenode是不會進行數據塊的復制的。
Namenode從所有的 Datanode接收心跳信號和塊狀態(tài)報告。
每當Namenode檢測確認某個數據塊的副本數目達到這個最小值,那么該數據塊就會被認為是副本安全(safely replicated)的。
在一定百分比(這個參數可配置)的數據塊被Namenode檢測確認是安全之后(加上一個額外的30秒等待時間),Namenode將退出安全模式狀態(tài)。
接下來它會確定還有哪些數據塊的副本沒有達到指定數目,并將這些數據塊復制到其他Datanode上。
九、HDFS中的SNN
SecondaryNameNode(SNN)
在非Ha模式下,SNN一般是獨立的節(jié)點,周期完成對NN的EditLog向FsImage合并,減少EditLog大小,減少NN啟動時間
根據配置文件設置的時間間隔fs.checkpoint.period ?默認3600秒
根據配置文件設置edits log大小 fs.checkpoint.size 規(guī)定edits文件的最大值默認是64MB
十、Block的副本放置策略
第一個副本:放置在上傳文件的DN;如果是集群外提交,則隨機挑選一臺磁盤不太滿,CPU不太忙的節(jié)點。
第二個副本:放置在于第一個副本不同的 機架的節(jié)點上。
第三個副本:與第二個副本相同機架的節(jié)點。
更多副本:隨機節(jié)點。
十一、HDFS寫流程
Client和NN連接創(chuàng)建文件元數據
NN判定元數據是否有效
NN處發(fā)副本放置策略,返回一個有序的DN列表
Client和DN建立Pipeline連接
Client將塊切分成packet(64KB),并使用chunk(512B)+chucksum(4B)填充
Client將packet放入發(fā)送隊列dataqueue中,并向第一個DN發(fā)送
第一個DN收到packet后本地保存并發(fā)送給第二個DN
第二個DN收到packet后本地保存并發(fā)送給第三個DN
這一個過程中,上游節(jié)點同時發(fā)送下一個packet
生活中類比工廠的流水線:結論:流式其實也是變種的并行計算
Hdfs使用這種傳輸方式,副本數對于client是透明的
當block傳輸完成,DN們各自向NN匯報,同時client繼續(xù)傳輸下一個block
所以,client的傳輸和block的匯報也是并行的
十二、HDFS讀流程
為了降低整體的帶寬消耗和讀取延時,HDFS會盡量讓讀取程序讀取離它最近的副本。
如果在讀取程序的同一個機架上有一個副本,那么就讀取該副本。
如果一個HDFS集群跨越多個數據中心,那么客戶端也將首先讀本地數據中心的副本。
語義:下載一個文件:
Client和NN交互文件元數據獲取fileBlockLocation
NN會按距離策略排序返回
Client嘗試下載block并校驗數據完整性
語義:下載一個文件其實是獲取文件的所有的block元數據,那么子集獲取某些block應該成立
Hdfs支持client給出文件的offset自定義連接哪些block的DN,自定義獲取數據
這個是支持計算層的分治、并行計算的核心
Hadoop 大數據
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。