日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DataNode内部的各种数据结构

發(fā)布時間:2024/4/17 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataNode内部的各种数据结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ?DateNode的功能主要分為三大類:和DFSClient的交互;和NameNode的交互;本身提供數(shù)據(jù)存儲的功能。

? ?DataNode引用了FSDataset來提供數(shù)據(jù)存儲功能,?FSDataset是這個存儲結(jié)構(gòu)的入口,對于DataNode上面所有的Block的操作都要經(jīng)過FSDataset,由此管理在此DataNode上存儲的block。FSDataset的類圖如下:

??

?

?

?

DataStorage

DataStorage主要提供存儲元信息,如文件目錄,存儲目錄的狀態(tài)轉(zhuǎn)移管理,Version文件等等。

DataStorage內(nèi)部有一個List<StorageDirectory>數(shù)據(jù)結(jié)構(gòu),表示此DataNode的存儲目錄,DataNode的存儲目錄可以是多個的,這樣的好處是一個目錄壞了不至于把整個DataNode都下線了,這樣還可以在DataNode上掛載不同的文件系統(tǒng),數(shù)據(jù)寫入不同的文件系統(tǒng)。這個目錄列表是在hdfs-site.xml中配置的dfs.data.dir的值。

DataStorage的重頭戲是存儲目錄的狀態(tài)轉(zhuǎn)移管理,在DataNode啟動的時候可以帶上參數(shù):

  • FORMAT("-format"):格式化系統(tǒng)
  • REGULAR("-regular"):正常啟動
  • UPGRADE("-upgrade"):升級
  • ROLLBACK("-rollback"):回滾
  • FINALIZE("-finalize"):提交
  • IMPORT("-importCheckpoint"):從Checkpoint恢復(fù)

這樣就可以做相應(yīng)的操作,在做這些操作時有可能會中途失敗,所以DataNode需要管理具體的狀態(tài)以便在下次啟動操作時可以先處理之前的異常狀態(tài),當(dāng)異常狀態(tài)處理不了的時候,需要拋出異常。狀態(tài)轉(zhuǎn)移大致如下:

圖中展現(xiàn)出DataNode升級和回滾時的一些狀態(tài)轉(zhuǎn)移。

當(dāng)DataNode啟動時,DataStorage就會調(diào)用recoverTransitionRead方法檢查dfs.data.dir配置的每個文件目錄,首先分析每個目錄現(xiàn)在的子目錄的存在情況(DataStorage.analyzeStorage),返回StorageState;根據(jù)返回的StorageState會做相應(yīng)的操作(DataStorage.doRecover),就是做上圖展現(xiàn)的一系列操作。

??

FSDataset

FsDataset包含F(xiàn)SVolumeSet,FSVolumeSet包含F(xiàn)SVolume的數(shù)組,一般來說dfs.data.dir配置的每一個目錄都對應(yīng)著一個FSVolume,每個FSVolume落實(shí)到文件系統(tǒng)上至少包含了如下文件夾:current,tmp,detach,blocksBeingWritten目錄;current目錄表示當(dāng)前正常block的存儲目錄,tmp目錄表示datanode之間復(fù)制時block臨時存儲目錄,blocksBeingWritten表示DFSClient寫數(shù)據(jù)或者替換block時block臨時存儲目錄,detach目錄表示copy-on-write時候copy出來的block的存儲目錄,用于DFSClient append一個已有的block時使用。

current目錄是一個FSDir類表示的結(jié)構(gòu),FsDir有一個FsDir的數(shù)組,表示FsDir的子目錄,每個FsDir可以存儲dfs.datanode.numblocks個Block,如果存不下就需要存在子FsDir中了。

轉(zhuǎn)載于:https://www.cnblogs.com/nod0620/archive/2012/08/10/2624785.html

總結(jié)

以上是生活随笔為你收集整理的DataNode内部的各种数据结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。