HDFS DataNode详解
1. datanode介紹
1.1 datanode
datanode是負(fù)責(zé)當(dāng)前節(jié)點上的數(shù)據(jù)的管理,具體目錄內(nèi)容是在初始階段自動創(chuàng)建的,保存的文件夾位置由配置選項{dfs.data.dir}決定
1.2 datanode的作用
datanode以數(shù)據(jù)塊的形式存儲HDFS文件
datanode響應(yīng)HDFS 客戶端讀寫請求
datanode周期性向NameNode匯報心跳信息,數(shù)據(jù)塊信息,緩存數(shù)據(jù)塊信息
1.3 datanode的多目錄配置
datanode也可以配置多個目錄,每個目錄存儲的數(shù)據(jù)不一樣,數(shù)據(jù)不是副本
(見:https://www.cnblogs.com/cjq10029/p/12368074.html)
<property> #hdfs-site.xml
<name>dfs.datanode.data.dir</name>
<value>/sdb1/data,/opt/software/hadoop277/tmp/data</value>
</property>
1.4 datanode的邏輯結(jié)構(gòu)
我們可以將基于Federation的架構(gòu)的HDFS分為三層:數(shù)據(jù)層,邏輯層和服務(wù)層
1.4.1 數(shù)據(jù)層
將DataNode 中負(fù)責(zé)數(shù)據(jù)塊存儲和管理數(shù)據(jù)塊操作的部分抽象成數(shù)據(jù)層,它主要包括2部分:
1.4.1.1 DataStorage(數(shù)據(jù)塊存儲)
數(shù)據(jù)塊存儲主要是管理DataNode磁盤存儲空間以及磁盤存儲空間的生命周期。說的直白一點就是DataStorage這個類主要負(fù)責(zé)管理數(shù)據(jù)存儲文件信息,比如current,detach,finalized等等文件。
BlockPoolSliceStorage可以用來管理DataNode每一個單獨的塊池,DataStorage會持有這個BlockPoolSliceStorage對象引用,并通過這個引用來管理DataNode的塊池。
1.4.1.2 FSDataset(文件系統(tǒng)數(shù)據(jù)集)
FSDataset抽象了DataNode對數(shù)據(jù)塊管理的操作,比如創(chuàng)建數(shù)據(jù)塊,維護數(shù)據(jù)塊文件等。我們知道每一個DataNode都可以配置多個不同類型的存儲目錄來保存數(shù)據(jù),所以HDFS定義了FSVolumeImpl來管理DataNode上單個存儲目錄上 保存的數(shù)據(jù)塊,同時定義了FSVo
lumeList來維護DataNode上所有FSVolumeImpl對象的引用。FSDataSet會通過FSVolumeList提供的管理功能來管理DataNode上存儲的目錄保存的數(shù)據(jù)塊
1.4.2 邏輯層
DataNode基于數(shù)據(jù)層會執(zhí)行很多HDFS 邏輯處理,比如向NameNode匯報數(shù)據(jù)塊狀態(tài),發(fā)送心跳,掃描損壞的數(shù)據(jù)塊等,我們將HDFS執(zhí)行這些邏輯的部分抽象成邏輯層。邏輯層主要包括三個模塊:
1.4.2.1 BlockPoolManager
BlockPoolManager是管理所有BlockPool的接口類,在HDFS Federation機制下,我們在集群可以創(chuàng)建多個NameSpace,每一個NameSpace都對應(yīng)著一個BlockPool,一個BlockPoolManager會持有一個BPOfferService對象,用于管理DataNode單個BlockPool, 我們知道,如果引入HA機制, NameNode就會有ActiveNM 和 StandbyNM。所以每一個BPOfferService又會持有2個BPServiceActor對象,每一個BPServiceActor對應(yīng)于命名空間里的一個Name Node,該對象負(fù)責(zé)向NameNode發(fā)送心跳報告,數(shù)據(jù)塊匯報,緩存匯報等
1.4.2.2 DataBlockScanner
一個周期性掃描每一個數(shù)據(jù)塊并檢查數(shù)據(jù)塊校驗是否正常的一個線程
1.4.2.3 DirectoryScanner
周期性掃描磁盤數(shù)據(jù)塊,對比內(nèi)存中元數(shù)據(jù)與實際磁盤存儲數(shù)據(jù)塊的差異,并根據(jù)差異更新內(nèi)存元數(shù)據(jù),使得與磁盤保存一致
1.4.3 服務(wù)層
主要用于客戶端或者其他節(jié)點和DataNode通信,以及訪問DataNode狀態(tài)等功能,主要包括三個模塊:
1.4.3.1 HttpServer: 對外提供http服務(wù)
1.4.3.2 ipcServer:RPC服務(wù)端,響應(yīng)來自客戶端,NameNode和其他DataNode的rpc請求
1.4.3.3 DataXceiverServer:輸出傳輸服務(wù)端,響應(yīng)來自客戶端以及其他Data Node的流式接口請求
1.5 datanode工作機制
datanode啟動時,每個datanode對本地磁盤進行掃描,將本datanode上保存的block信息匯報給namenode
namenode在接收到的block信息以及該block所在的datanode信息等保存在內(nèi)存中。
DataNode啟動后向NameNode注冊,通過后周期性(1小時)的向NameNode上報所有的塊信息
通過向NameNode發(fā)送心跳保持與其聯(lián)系(3秒一次),心跳返回結(jié)果帶有NN的命令,返回的命令為:如塊的復(fù)制,刪除某個數(shù)據(jù)塊…..
如果10分鐘沒有收到DataNode的心跳,則認(rèn)為其已經(jīng)lost,并copy其上的block到其它DataNode
DN在其文件創(chuàng)建后三周進行驗證其checkSum的值是否和文件創(chuàng)建時的checkSum值一致
DataNode之間還會相互通信,執(zhí)行數(shù)據(jù)塊復(fù)制任務(wù)。同時,在客戶端執(zhí)行寫操作的時候,DataNode之間需要相互配合,以保證寫操作的一致性
邏輯結(jié)構(gòu)原文鏈接:https://blog.csdn.net/zhanglh046/article/details/78599095
總結(jié)
以上是生活随笔為你收集整理的HDFS DataNode详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 节日想送朋友筷子,家用的,有什么品牌推荐
- 下一篇: Apache配置URL重定向