hdfs

概念

1.適合一次寫入,多次讀出司致。
2.優(yōu)點:高容錯(多副本)拆吆;適合大數(shù)據(jù);可用廉價服務器
3.缺點:不適合低延時訪問數(shù)據(jù)脂矫;無法高效對大量小文件進行存儲枣耀;不支持并發(fā)寫入;不能隨機修改(只能append)

特點

高容錯 : 由于 HDFS 采用數(shù)據(jù)的多副本方案庭再,所以部分硬件的損壞不會導致全部數(shù)據(jù)的丟失
高吞吐量 : HDFS 設計的重點是支持高吞吐量的數(shù)據(jù)訪問捞奕,而不是低延遲的數(shù)據(jù)訪問。
大文件支持 : HDFS 適合于大文件的存儲佩微,文檔的大小應該是是 GB 到 TB 級別的缝彬。
簡單一致性模型 : HDFS 更適合于一次寫入多次讀取 (write-once-read-many) 的訪問模型。支持將內容追加到文件末尾哺眯,但不支持數(shù)據(jù)的隨機訪問谷浅,不能從文件任意位置新增數(shù)據(jù)
跨平臺移植性 : HDFS 具有良好的跨平臺移植性,這使得其他大數(shù)據(jù)計算框架都將其作為數(shù)據(jù)持久化存儲的首選方案

Block

1.2.x/3.x默認128M奶卓;1.x默認64M一疯;本地模式32M
2.尋址時間為傳輸時間1%最好
3.Block太大,在磁盤上的傳輸時間過長夺姑,Map太少
4.Block太小墩邀,尋址時間過長
5.磁盤傳輸速度決定Block大小

window操作HDFS API只需要hadoop/bin和hadoop.client。依靠jar調用bin里的命令操作盏浙。

讀寫流程

三個單位

1.block是最大的一個單位眉睹,它是最終存儲在DataNode上的數(shù)據(jù)粒度荔茬。由dfs.block.size參數(shù)決定。默認是128M竹海。
2.packet是中等單位慕蔚,它是dfsClient流向DataNode的粒度,以dfs.write.packet.size參數(shù)決定斋配,默認是64kb孔飒。注:這個參數(shù)是參考值,是指真正傳輸時艰争,會以這個參數(shù)為基準進行調整坏瞄。調整的原因是packet特定的結構,調整的目標是這個packet的大小剛好包含結構中所有的元素甩卓,同時也保證寫入DataNode后當前packet的大小不會超過設定值鸠匀。
3.chunk是最小的粒度,是dfsClient流向DataNode進行數(shù)據(jù)校驗的粒度猛频。默認512b
注:事實上一個chunk還包含4b的校驗值狮崩,因而寫入packet時是516b。數(shù)據(jù)與校驗值比例是128:1鹿寻,所以128M的block會有1M的校驗文件與之對應睦柴。

HDFS文件塊目錄結構

${dfs.datanode.data.dir}/
├── current
│ ├── BP-526805057-127.0.0.1-1411980876842
│ │ └── current
│ │ ├── VERSION
│ │ ├── finalized
│ │ │ ├── blk_1073741825
│ │ │ ├── blk_1073741825_1001.meta
│ │ │ ├── blk_1073741826
│ │ │ └── blk_1073741826_1002.meta
│ │ └── rbw
│ └── VERSION
└── in_use.lock

in_use.lock表示DataNode正在對文件夾進行操作
rbw是“replica being written”的意思,該目錄用于存儲用戶當前正在寫入的數(shù)據(jù)毡熏。
Block元數(shù)據(jù)文件(*.meta)由一個包含版本坦敌、類型信息的頭文件和一系列校驗值組成。校驗和也正是存在其中痢法。

寫流程

Client向NameNode發(fā)起RPC請求狱窘。
Namenode會檢查文件是否存才,是否有權限進行操作财搁,成功會為文件創(chuàng)建一個記錄蘸炸,否則讓客戶端拋出異常。
當客戶端開始寫文件尖奔,數(shù)據(jù)流入dfsOutputStream搭儒,dfsOutputStream內會有一個chunk大小的buff,當數(shù)據(jù)寫滿buff(或強制flush)時提茁,會計算checkSum值淹禾,然后填塞進packet。
當一個chunk填塞進packet后茴扁,仍不會立即發(fā)送铃岔,而是積累到一個packet填滿后,將這個packet放入dataqueue隊列峭火。進入dataqueue隊列的packet會被另一個線程按順序取出發(fā)送到datanode毁习。
client還會向NameNode申請blocks智嚷,獲取用來存儲replicas的合適datanode列表,列表大小根據(jù)Namenode中relication的設定而定纺且。
開始以pipline的形式將packet寫入所有replicas中纤勒。開發(fā)庫把packet以流的方式寫入第一個datanode,該datanode把該packet存儲之后隆檀,再傳遞給pipline的下一個datanode,直到最后一個datanode粹湃,最后一個datanode成功存儲返回ack packet(確認消息)恐仑,在pipline里傳遞至客戶端,客戶端開發(fā)庫內部維護著ack queue为鳄,成功收到datanode返回的ack packet后裳仆,會從 ack queue移除相應的packet。

如果傳輸過程中孤钦,有某個datanode出現(xiàn)故障歧斟,開發(fā)庫關閉pipline,出現(xiàn)故障的datanode會被移除偏形,剩余的block會繼續(xù)在剩下的datanode中以pipline的方式傳輸静袖,同時namenode會分配一個新的datanode,保證replicas的設定數(shù)量俊扭。
客戶端完成數(shù)據(jù)寫入后队橙,close掉數(shù)據(jù)流。

注1:生產者消費者模型萨惑,阻塞生產者的條件是dataqueue與ackqueue之和超過了一個block的packet上限
注2:只要寫入達到dfs.replication.min的副本數(shù)(默認1)捐康,寫操作就成功,并且這個塊可以在集群中異步復制庸蔼,直到達到目標副本數(shù)解总。
注3:namenode在addblock動作后不知道block副本元信息,知識返回給客戶端一個LocatedBlock對象姐仅,包含了存放Block的位置花枫。只有接收存儲block成功的消息后才正式記錄block位置。


圖片.png
圖片.png

讀操作:

1.Client向NameNode發(fā)起RPC請求
2.Namenode視情況返回全部或部分Block列表萍嬉,對于每個block乌昔,Namenode都會返回該block拷貝的DataNode地址。
3.客戶端選取離它最近的Datanode讀取block壤追,如果客戶端本身就是DataNode磕道,就直接本地讀取。
4.讀完當前block行冰,關閉與當前DataNode鏈接溺蕉。并選擇下一個block的最佳DataNode
5.當讀取完列表Block伶丐,如果還沒讀完,繼續(xù)向NameNode申請Block列表疯特。
注:讀取完一個block都會進行checksum驗證哗魂,如果讀取datanode時出現(xiàn)錯誤,客戶端會通知namenode漓雅,然后從下一個擁有該block的datanode繼續(xù)讀录别。


圖片.png

網絡拓撲

求路徑和

機架感知

BlockPlacementPolicyDefault(chooseTargetInOrder)
第一個副本在Client所處節(jié)點上。如果客戶端在集群外邻吞,隨機選一個
第二個副本在另一個機架隨機一個節(jié)點
第三個副本在第二個副本的機架的另一個隨機節(jié)點

NN和2NN工作機制

seen_txid:保存一個數(shù)字组题,就是最好一個edits_的數(shù)字

NN

fsImage:HDFS文件系統(tǒng)元數(shù)據(jù)的一個永久性檢查點,包含HDFS文件系統(tǒng)的所有目錄和文件inode的序列化信息
1.第一次啟動生成/之后加載Edits和fsImage鏡像
2.客戶端請求cud
3.cud操作先記錄在Edits.inprogress上
4.cud

2NN

5.2NN定期發(fā)送CheckPoint給NN抱冷,如果需要CheckPoint(edits寫滿或定時)
6.執(zhí)行CheckPoint崔列,滾動edits.inprogress,得到edits,拷貝fsImage旺遮,合成FsImage.ckpt
7.fsImage.ckpt返還給NN赵讯,重命名為新的fsImage

DN工作機制

圖片.png

1.DN:1個block分為兩塊數(shù)據(jù):數(shù)據(jù)本身和元信息(校驗和,長度耿眉,時間戳)
2.啟動去NN注冊
3.返回注冊成功
4.周期性上報塊信息
5.提交心跳(心跳返回結果帶有NameNode給DataNode的命令边翼,如復制數(shù)據(jù)塊到另一個DataNode或刪除數(shù)據(jù)塊),心跳默認3秒一次鸣剪,如果10分鐘沒有收到某個DataNode的心跳讯私,則認為該節(jié)點不可用。

心跳機制

NameNode 不會將任何新的 IO 請求轉發(fā)給標記為死亡的 DataNode, 也不會再使用這些 DataNode 上的數(shù)據(jù)
由于 DataNode 不再可用, 可能會導致某些塊的副本數(shù)小于指定值, NameNode 會跟蹤這些塊, 再必要的時候進行重新復制

數(shù)據(jù)完整性CheckSum

1.當DataNode讀取Block的時候西傀,它會計算CheckSum
2.如果計算后的CheckSum與Block創(chuàng)建時值不一樣斤寇,說明Block已經損壞。
3.Client讀取其他DataNode上的Block
4.常見校驗算法crc(32)拥褂,md5(128)娘锁,sha1(160)
5.DataNode在其他文件創(chuàng)建后周期驗證CheckSum
6.https://blog.csdn.net/qq_27087973/article/details/80401206

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饺鹃,隨后出現(xiàn)的幾起案子莫秆,更是在濱河造成了極大的恐慌,老刑警劉巖悔详,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镊屎,死亡現(xiàn)場離奇詭異,居然都是意外死亡茄螃,警方通過查閱死者的電腦和手機缝驳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人用狱,你說我怎么就攤上這事运怖。” “怎么了夏伊?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵摇展,是天一觀的道長。 經常有香客問我溺忧,道長咏连,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任鲁森,我火速辦了婚禮捻勉,結果婚禮上,老公的妹妹穿的比我還像新娘刀森。我一直安慰自己,他們只是感情好报账,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布研底。 她就那樣靜靜地躺著,像睡著了一般透罢。 火紅的嫁衣襯著肌膚如雪榜晦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天羽圃,我揣著相機與錄音乾胶,去河邊找鬼。 笑死朽寞,一個胖子當著我的面吹牛识窿,可吹牛的內容都是我干的。 我是一名探鬼主播脑融,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼喻频,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肘迎?” 一聲冷哼從身側響起甥温,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妓布,沒想到半個月后姻蚓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡匣沼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年狰挡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡圆兵,死狀恐怖跺讯,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情殉农,我是刑警寧澤刀脏,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站超凳,受9級特大地震影響愈污,放射性物質發(fā)生泄漏。R本人自食惡果不足惜轮傍,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一暂雹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧创夜,春花似錦杭跪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至檬贰,卻和暖如春姑廉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翁涤。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工桥言, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人葵礼。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓号阿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸳粉。 傳聞我的和親對象是個殘疾皇子倦西,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容