【大數據】HDFS之DataNode工作機制

DataNode工作機制

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

數據完整性

思考:如果電腦磁盤裏面存儲的數據是控制高鐵信號燈的紅燈信號(1)和綠燈信號(0),但是存儲該數據的磁盤壞了,一直顯示是綠燈,是否很危險?

同理,DataNode節點上的數據損壞了,卻沒有發現,是否也很危險,那麼如何解決呢?

  • 保證數據完整性的方法
  1. 當DataNode讀取Block的時候,它會計算CheckSum(校驗和)
  2. 如果計算後的CheckSum,與Block創建時值不一樣,說明Block已經損壞
  3. Client讀取其他DataNode上的Block
  4. DataNode在其文件創建後周期驗證CheckSum,如下圖:

掉線時參數設置

DataNode進程死亡或者網絡故障造成DataNode無法與NameNode通信時的TimeOut參數設置

  1. NameNode不會立即把該節點判斷爲死亡,要經過一段時間,這段時間稱作超時時長
  2. HDFS默認的超時時長爲10分鐘+30秒
  3. 超時時長的計算公式爲:
# dfs.namenode.heartbeat.recheck-interval默認爲300000ms,dfs.heartbeat.interval默認爲5s
TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval
  • 實際開發的時候,可以根據自己服務器的情況進行調整,比如服務器性能比較低,那麼可以適當的把時間調長;如果服務器性能很好,那麼可以適當縮短。

服役新數據節點

需求:隨着公司業務的增長或者重大活動(例如雙11),數據量越來越大,原有的數據節點的容量已經不能滿足存儲數據的需求,需要在原有集羣基礎上動態添加新的數據節點。

  • 步驟:
  1. 克隆一臺虛擬機
  2. 修改IP地址和主機名稱
  3. 刪除原來HDFS文件系統中留存的data和logs文件
  4. 直接單點啓動節點即可

退役舊數據節點

退役舊數據節點有兩種方式:添加白名單和黑名單退役

添加白名單

  • 步驟:
  1. 在NameNode的hadoop安裝目錄/etc/hadoop目錄下創建dfs.hosts文件
  2. 添加白名單主機名稱
  3. 在NameNode的hdfs-site.xml配置文件中增加dfs.hosts屬性
<property>
    <name>dfs.hosts</name>
    # dfs.hosts文件所在路徑
    <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
</property>
  1. 配置文件同步到集羣其它節點
  2. 刷新NameNode
[kocdaniel@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
  1. 更新ResourceManager節點
[kocdaniel@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
  1. 如果數據不均衡,可以用命令實現集羣的再平衡
[kocdaniel@hadoop102 sbin]$ ./start-balancer.sh

黑名單退役

  • 步驟:
  1. 在NameNode的hadoop安裝目錄/etc/hadoop目錄下創建dfs.hosts.exclude文件
  2. 添加要退役的主機名稱
  3. 在NameNode的hdfs-site.xml配置文件中增加dfs.hosts.exclude屬性
<property>
    <name>dfs.hosts.exclude</name>
     <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value>
</property>
  1. 配置文件同步到集羣其它節點
  2. 刷新NameNode、刷新ResourceManager
[kocdaniel@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
[kocdaniel@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
  1. 檢查Web瀏覽器,退役節點的狀態爲decommission in progress(退役中),說明數據節點正在複製塊到其他節點
  2. 等待退役節點狀態爲decommissioned(所有塊已經複製完成),停止該節點及節點資源管理器。
  • 注意:如果副本數是3,服役的節點小於等於3,是不能退役成功的,需要修改副本數後才能退役
  • 注意:不允許白名單和黑名單中同時出現同一個主機名稱。

兩者的不同

  • 添加白名單比較暴躁,會直接把要退役的節點服務關掉,不復制數據
  • 黑名單退役,會將要退役的節點服務器的數據複製到其它節點上,不會直接關閉節點服務,比較慢

DataNode多目錄配置

  • DataNode也可以配置成多個目錄,每個目錄存儲的數據不一樣。即:數據不是副本,與NameNode多目錄不同
  • 作用:保證所有磁盤都被利用均衡,類似於windows中的磁盤分區

轉自:https://www.cnblogs.com/kocdaniel/p/11604887.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章