淺談HDFS(三)之DataNote

DataNode工做機制

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

數據完整性

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

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

  • 保證數據完整性的方法
  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中的磁盤分區
    歡迎關注下方公衆號,獲取更多文章信息

    1
相關文章
相關標籤/搜索