Hadoop之HDFS中DataNode的工做機制

1. DataNode 的工做機制

(1) 一個數據塊在 DataNode 上以文件形式存儲在磁盤上,包括兩個文件,一個是數據自己,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳;
(2) DataNode 啓動後向 NameNode 註冊,經過後,週期性(1小時)的向 NameNode 上報全部的塊信息;
(3) 心跳是每3秒一次,心跳返回結果帶有 NameNode 給該 DataNode 的命令如複製塊數據到另外一臺機器,或刪除某個數據塊。若是超過10分鐘沒有收到某個 DataNode 的心跳,則認爲該節點不可用;
(4) 集羣運行中能夠安全加入和退出一些機器。node

2. 數據完整性

(1) 當 DataNode 讀取 block 的時候,它會計算 checksum;
(2) 若是計算後的 checksum,與 block 建立時值不同,說明 block 已經損壞;
(3) client 讀取其餘 DataNode 上的 block;
(4) DataNode 在其文件建立後周期驗證 checksum。安全

3. 掉線時限參數設置

      DataNode 進程死亡或者網絡故障形成 DataNode 沒法與 NameNode 通訊,NameNode 不會當即把該節點斷定爲死亡,要通過一段時間,這段時間暫稱做超時時長。HDFS 默認的超時時長爲10分鐘+30秒。若是定義超時時間爲 timeout,則超時時長的計算公式爲:timeout  = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval。
      而默認的 dfs.namenode.heartbeat.recheck-interval 大小爲5分鐘,dfs.heartbeat.interval 默認爲3秒。
      須要注意的是 hdfs-site.xml 配置文件中的 heartbeat.recheck.interval 的單位爲毫秒,dfs.heartbeat.interval 的單位爲秒。bash

<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value>
</property>
<property>
    <name> dfs.heartbeat.interval </name>
    <value>3</value>
</property>

4. DataNode的目錄結構

      和 NameNode 不一樣的是,DataNode 的存儲目錄是初始階段自動建立的,不須要額外格式化。
1. 在 /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current 這個目錄下查看版本號網絡

[bigdata@hadoop102 current]$ cat VERSION 
storageID=DS-1b998a1d-71a3-43d5-82dc-c0ff3294921b
clusterID=CID-1f2bf8d1-5ad2-4202-af1c-6713ab381175
cTime=0
datanodeUuid=970b2daf-63b8-4e17-a514-d81741392165
storageType=DATA_NODE
layoutVersion=-56

2. 具體解釋
(1) storageID:存儲 id 號;
(2) clusterID 集羣 id,全局惟一;
(3) cTime 屬性標記了 DataNode 存儲系統的建立時間,對於剛剛格式化的存儲系統,這個屬性爲0;可是在文件系統升級以後,該值會更新到新的時間戳;
(4) datanodeUuid:DataNode 的惟一識別碼;
(5) storageType:存儲類型;
(6) layoutVersion 是一個負整數。一般只有 HDFS 增長新特性時纔會更新這個版本號。oop

3.在 /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-97847618-192.168.10.102-1493726072779/current 這個目錄下查看該數據塊的版本號ui

[bigdata@hadoop102 current]$ cat VERSION 
#Mon May 08 16:30:19 CST 2017
namespaceID=1933630176
cTime=0
blockpoolID=BP-97847618-192.168.10.102-1493726072779
layoutVersion=-56

4.具體解釋
(1) namespaceID:是 DataNode 首次訪問 NameNode 的時候從 NameNode 處獲取的 storageID 對每一個 DataNode 來講是惟一的(但對於單個 DataNode 中全部存儲目錄來講則是相同的),NameNode 可用這個屬性來區分不一樣 DataNode。
(2) cTime 屬性標記了 DataNode 存儲系統的建立時間,對於剛剛格式化的存儲系統,這個屬性爲0;可是在文件系統升級以後,該值會更新到新的時間戳。
(3) blockpoolID:一個 block pool id 標識一個 block pool,而且是跨集羣的全局惟一。當一個新的 Namespace 被建立的時候( format 過程的一部分)會建立並持久化一個惟一 ID。在建立過程構建全局惟一的 BlockPoolID 比人爲的配置更可靠一些。NN 將 BlockPoolID 持久化到磁盤中,在後續的啓動過程當中,會再次 load 並使用。
(4) layoutVersion 是一個負整數。一般只有 HDFS 增長新特性時纔會更新這個版本號。spa

 

本文爲原創文章,若是對你有一點點的幫助,別忘了點贊哦!比心!如需轉載,請註明出處,謝謝!

相關文章
相關標籤/搜索