大數(shù)據(jù)HDFS讀寫數(shù)據(jù)的過程探究

2021-03-07    分類: 網(wǎng)站建設(shè)

讀數(shù)據(jù)

  1. 跟namenode通信查詢元數(shù)據(jù),找到文件塊所在的datanode服務器
  2. 挑選一臺datanode(就近原則,然后隨機)服務器,請求建立socket流
  3. datanode開始發(fā)送數(shù)據(jù)(從磁盤里面讀取數(shù)據(jù)放入流,以packet為單位來做校驗)
  4. 客戶端以packet為單位接收,現(xiàn)在本地緩存,然后寫入目標文件
大數(shù)據(jù)HDFS讀寫數(shù)據(jù)的過程探究

寫數(shù)據(jù)

  1. 根namenode通信請求上傳文件,namenode檢查目標文件是否已存在,父目錄是否存在
  2. namenode返回是否可以上傳
  3. client請求第一個 block該傳輸?shù)侥男ヾatanode服務器上
  4. namenode返回3個datanode服務器ABC
  5. client請求3臺dn中的一臺A上傳數(shù)據(jù)(本質(zhì)上是一個RPC調(diào)用,建立pipeline),A收到請求會繼續(xù)調(diào)用B,然后B調(diào)用C,將真?zhèn)€pipeline建立完成,逐級返回客戶端
  6. client開始往A上傳第一個block(先從磁盤讀取數(shù)據(jù)放到一個本地內(nèi)存緩存),以packet為單位,A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答隊列等待應答
  7. 當一個block傳輸完成之后,client再次請求namenode上傳第二個block的服務器。
大數(shù)據(jù)HDFS讀寫數(shù)據(jù)的過程探究

網(wǎng)絡故障,臟數(shù)據(jù)如何解決?

DataNode 失效等問題,這些問題 HDFS 在設(shè)計的時候都早已考慮到了。下面來介紹一下數(shù)據(jù)損壞處理流程:

  • 當 DataNode 讀取 block 的時候,它會計算 checksum。
  • 如果計算后的 checksum,與 block 創(chuàng)建時值不一樣,說明該 block 已經(jīng)損壞。
  • Client 讀取其它 DataNode上的 block。
  • NameNode 標記該塊已經(jīng)損壞,然后復制 block 達到預期設(shè)置的文件備份數(shù) 。
  • DataNode 在其文件創(chuàng)建后驗證其 checksum。

讀寫過程,數(shù)據(jù)完整性如何保持?

通過校驗和。因為每個chunk中都有一個校驗位,一個個chunk構(gòu)成packet,一個個packet最終形成block,故可在block上求校驗和。

HDFS 的client端即實現(xiàn)了對 HDFS 文件內(nèi)容的校驗和 (checksum) 檢查。當客戶端創(chuàng)建一個新的HDFS文件時候,分塊后會計算這個文件每個數(shù)據(jù)塊的校驗和,此校驗和會以一個隱藏文件形式保存在同一個 HDFS 命名空間下。當client端從HDFS中讀取文件內(nèi)容后,它會檢查分塊時候計算出的校驗和(隱藏文件里)和讀取到的文件塊中校驗和是否匹配,如果不匹配,客戶端可以選擇從其他 Datanode 獲取該數(shù)據(jù)塊的副本。

HDFS中文件塊目錄結(jié)構(gòu)具體格式如下:

  1. ${dfs.datanode.data.dir}/  
  2. ├── current  
  3. │ ├── BP-526805057-127.0.0.1-1411980876842  
  4. │ │ └── current  
  5. │ │ ├── VERSION  
  6. │ │ ├── finalized  
  7. │ │ │ ├── blk_1073741825  
  8. │ │ │ ├── blk_1073741825_1001.meta  
  9. │ │ │ ├── blk_1073741826  
  10. │ │ │ └── blk_1073741826_1002.meta  
  11. │ │ └── rbw  
  12. │ └── VERSION  
  13. └── in_use.lock 

in_use.lock表示DataNode正在對文件夾進行操作

rbw是“replica being written”的意思,該目錄用于存儲用戶當前正在寫入的數(shù)據(jù)。

Block元數(shù)據(jù)文件(*.meta)由一個包含版本、類型信息的頭文件和一系列校驗值組成。校驗和也正是存在其中。

當前文章:大數(shù)據(jù)HDFS讀寫數(shù)據(jù)的過程探究
文章分享:http://www.bm7419.com/news32/104632.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、關(guān)鍵詞優(yōu)化、自適應網(wǎng)站、虛擬主機、網(wǎng)站營銷網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設(shè)