DataNode工作機制
- 一個數據塊在DataNode上以文件形式存儲在磁盤上,包括兩個文件:一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。
- DataNode啓動後向NameNode註冊,通過後,週期性(1小時)的向NameNode上報所有的塊信息。
- 心跳是每3秒一次,心跳返回結果帶有NameNode給該DataNode的命令如複製塊數據到另一臺機器,或刪除某個數據塊。
- 如果超過10分鐘沒有收到某個DataNode的心跳,則認爲該節點不可用。
- 集羣運行中可以安全加入和退出一些機器。
數據完整性
思考:
如果DataNode磁盤中存儲的數據是控制紅綠燈的紅燈信號(1)和綠燈(0),但是存儲該數據的磁盤壞了,一直顯示是綠燈,是否很危險?同理,DataNode節點上的數據損壞了,卻沒有發現,也是很危險的,那麼如何解決呢?
如下是DataNode節點保證數據完整性的方法
- 當DataNode讀取Block的時候,它會計算CheckSum。
- 如果計算後的CheckSum,與Block創建時值不一樣,說明Block已經損壞。
- Client讀取其他DataNode上的Block。
- DataNode在其文件創建後周期驗證CheckSum。
掉線時限參數設置
- 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修改參數來修改掉線時限
需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的單位爲毫秒,dfs.heartbeat.interval的單位爲秒。
服役新數據節點
需求:
隨着公司業務的增長,數據量越來越大,原有的數據節點的容量已經不能滿足存儲數據的需求,需要在原有集羣基礎上動態添加新的數據節點。
- 環境準備
- 在hadoop104主機上再克隆一臺hadoop105主機
- 修改IP地址和主機名稱
- 刪除原來HDFS文件系統留存的文件(/opt/module/hadoop-2.7.2/data和log)
- source配置文件
[redhat@hadoop105 hadoop-2.7.2]$ source /etc/profile
2.服役新節點具體步驟
- 直接啓動DataNode,即可關聯到集羣
[redhat@hadoop105 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[redhat@hadoop105 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
- 在hadoop105上上傳文件
[redhat@hadoop105 hadoop-2.7.2]$ hadoop fs -put /opt/module/hadoop-2.7.2/LICENSE.txt /
- 如果數據不均衡,可以用命令實現集羣的再平衡
[redhat@hadoop102 sbin]$ ./start-balancer.sh
爲什麼不在slave文件中寫入hadoop105?
答: 因爲啓動是在hadoop105上進行的單點啓動,slave只在NameNode羣起集羣時有用
退役舊數據節點
當集羣運行一段時間後,一些舊的節點因爲性能等等原因需要下線,將業務轉移到其他的服務器上。對於退役節點的做法,一般有兩種:添加黑名單與添加白名單
添加黑名單
- 在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目錄下創建blacktxt文件
[redhat@hadoop102 hadoop]$ pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[redhat@hadoop102 hadoop]$ touch dfs.hosts.exclude
[redhat@hadoop102 hadoop]$ vi dfs.hosts.exclude
添加如下主機名稱(需要退役的節點)
hadoop105
- 在NameNode的hdfs-site.xml配置文件中增加dfs.hosts.exclude屬性
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/module/hadoop-2.7.2/etc/hadoop/blacktxt</value>
</property>
- 刷新NameNode、刷新ResourceManager
[redhat@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
[redhat@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
- 檢查Web瀏覽器,退役節點的狀態爲decommission in progress(退役中),說明數據節點正在複製塊到其他節點
- 等待退役節點狀態爲decommissioned(所有塊已經複製完成),停止該節點及節點資源管理器。注意:如果副本數是3,服役的節點小於等於3,是不能退役成功的,需要修改副本數後才能退役
- 如果數據不均衡,可以用命令實現集羣的再平衡
[redhat@hadoop102 hadoop-2.7.2]$ sbin/start-balancer.sh
添加白名單
添加到白名單的主機節點,都允許訪問NameNode,不在白名單的主機節點,都會被退出。
- 在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目錄下創建writetxt文件
[redhat@hadoop102 hadoop]$ pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[redhat@hadoop102 hadoop]$ touch writetxt
[redhat@hadoop102 hadoop]$ vi writetxt
添加如下主機名稱(不退役的節點)
hadoop102
hadoop103
hadoop104
- 在NameNode的hdfs-site.xml配置文件中增加dfs.hosts屬性
<property>
<name>dfs.hosts</name>
<value>/opt/module/hadoop-2.7.2/etc/hadoop/writetxt</value>
</property>
- 配置文件分發
[redhat@hadoop102 hadoop]$ xsync hdfs-site.xml
- 刷新NameNode
[redhat@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
- 更新ResourceManager節點
[redhat@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
- 在web瀏覽器上查看
- 如果數據不均衡,可以用命令實現集羣的再平衡
[redhat@hadoop102 hadoop-2.7.2]$ sbin/start-balancer.sh
黑名單中指定的hadoop105,退役後在hadoop的集羣中它還是存在的,且hadoop還在不斷和hadoop105聯繫;但是白名單中未指定的hadoop105則是在hadoop集羣中直接被除名了
所以可以發現:黑名單對待退役節點比較“溫和”,白名單對待退役節點沒有什麼“人情味”,所以退役節點應該選擇黑名單,白名單更多是被用來增加集羣安全性的,而不是用來退役節點的
DataNode多目錄配置
- DataNode也可以配置成多個目錄,每個目錄存儲的數據不一樣。即:數據不是副本
- 具體配置如下
hdfs-site.xml<property>
<name>dfs.datanode.data.dir
<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>
- 關閉hadoop並且刪除data和logs中的全部數據
[redhat@hadoop102 hadoop-2.7.2]$rm -rf data/ logs/
[redhat@hadoop103 hadoop-2.7.2]$rm -rf data/ logs
[redhat@hadoop104 hadoop-2.7.2]$rm -rf data/ logs
- 格式化集羣並啓動
[redhat@hadoop102 hadoop-2.7.2]$hdfs namenode -format
[redhat@hadoop102 hadoop-2.7.2]$start-dfs.sh
[redhat@hadoop103 hadoop-2.7.2]$start-yarn.sh
- 查看結果