DataNode工作機制 1. 一個數據塊在DataNode上以文件形式存儲在磁碟上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。 2. DataNode啟動後向NameNode註冊,通過後,周期性(1小時)的向NameNode上報所有的塊信息。 3. D ...
DataNode工作機制
- 一個數據塊在DataNode上以文件形式存儲在磁碟上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。
- DataNode啟動後向NameNode註冊,通過後,周期性(1小時)的向NameNode上報所有的塊信息。
- DataNode與NameNode之間有一個心跳事件,心跳是每3秒一次,心跳返回結果帶有NameNode給該DataNode的命令,如果超過10分鐘沒有收到某個DataNode的心跳,則認為該節點不可用。
- 集群運行中可以安全加入和退出一些機器
數據完整性
思考:如果電腦磁碟裡面存儲的數據是控制高鐵信號燈的紅燈信號(1)和綠燈信號(0),但是存儲該數據的磁碟壞了,一直顯示是綠燈,是否很危險?
同理,DataNode節點上的數據損壞了,卻沒有發現,是否也很危險,那麼如何解決呢?
- 保證數據完整性的方法
- 當DataNode讀取Block的時候,它會計算CheckSum(校驗和)
- 如果計算後的CheckSum,與Block創建時值不一樣,說明Block已經損壞
- Client讀取其他DataNode上的Block
- DataNode在其文件創建後周期驗證CheckSum,如下圖:
掉線時參數設置
DataNode進程死亡或者網路故障造成DataNode無法與NameNode通信時的TimeOut參數設置
- NameNode不會立即把該節點判斷為死亡,要經過一段時間,這段時間稱作超時時長
- HDFS預設的超時時長為10分鐘+30秒
- 超時時長的計算公式為:
# dfs.namenode.heartbeat.recheck-interval預設為300000ms,dfs.heartbeat.interval預設為5s
TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval
- 實際開發的時候,可以根據自己伺服器的情況進行調整,比如伺服器性能比較低,那麼可以適當的把時間調長;如果伺服器性能很好,那麼可以適當縮短。
服役新數據節點
需求:隨著公司業務的增長或者重大活動(例如雙11),數據量越來越大,原有的數據節點的容量已經不能滿足存儲數據的需求,需要在原有集群基礎上動態添加新的數據節點。
- 步驟:
- 克隆一臺虛擬機
- 修改IP地址和主機名稱
- 刪除原來HDFS文件系統中留存的data和logs文件
- 直接單點啟動節點即可
退役舊數據節點
退役舊數據節點有兩種方式:添加白名單和黑名單退役
添加白名單
- 步驟:
- 在NameNode的
hadoop安裝目錄/etc/hadoop
目錄下創建dfs.hosts文件 - 添加白名單主機名稱
- 在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>
- 配置文件同步到集群其它節點
- 刷新NameNode
[kocdaniel@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
- 更新ResourceManager節點
[kocdaniel@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
- 如果數據不均衡,可以用命令實現集群的再平衡
[kocdaniel@hadoop102 sbin]$ ./start-balancer.sh
黑名單退役
- 步驟:
- 在NameNode的
hadoop安裝目錄/etc/hadoop
目錄下創建dfs.hosts.exclude文件 - 添加要退役的主機名稱
- 在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>
- 配置文件同步到集群其它節點
- 刷新NameNode、刷新ResourceManager
[kocdaniel@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
[kocdaniel@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
- 檢查Web瀏覽器,退役節點的狀態為decommission in progress(退役中),說明數據節點正在複製塊到其他節點
- 等待退役節點狀態為decommissioned(所有塊已經複製完成),停止該節點及節點資源管理器。
- 註意:如果副本數是3,服役的節點小於等於3,是不能退役成功的,需要修改副本數後才能退役
- 註意:不允許白名單和黑名單中同時出現同一個主機名稱。
兩者的不同
- 添加白名單比較暴躁,會直接把要退役的節點服務關掉,不複製數據
- 黑名單退役,會將要退役的節點伺服器的數據複製到其它節點上,不會直接關閉節點服務,比較慢
DataNode多目錄配置
- DataNode也可以配置成多個目錄,每個目錄存儲的數據不一樣。即:數據不是副本,與NameNode多目錄不同
- 作用:保證所有磁碟都被利用均衡,類似於windows中的磁碟分區
歡迎關註下方公眾號,獲取更多文章信息