目錄
一、DataNode工作機制
DataNode工作機制,如下所示:
【1】一個數據塊在 DataNode上以文件形式存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。
【2】DataNode啓動後向 NameNode註冊,通過後,週期性(1小時)的向NameNode上報所有的塊信息。
【3】心跳是每 3秒一次,心跳返回結果帶有 NameNode給該 DataNode的命令,如複製塊數據到另一臺機器或刪除某個數據塊。如果超過10分鐘沒有收到某個 DataNode的心跳,則認爲該節點不可用。
【4】集羣運行中可以安全加入和退出一些機器。
二、數據完整性
思考:DataNode節點上的數據損壞了,卻沒有發現,存在很大危險隱患,該如何解決呢?
如下是 DataNode節點保證數據完整性的方法:
1)當 DataNode讀取 Block的時候,它會計算 CheckSum。
2)如果計算後的CheckSum,與 Block創建時值不一樣,說明Block已經損壞。
3)Client 讀取其他DataNode上的Block。
4)DataNode在其文件創建後周期驗證 CheckSum。
三、掉線時限參數設置
需要注意的是 hdfs-site.xml 配置文件中的heartbeat.recheck.interval的單位爲毫秒,dfs.heartbeat.interval的單位爲秒。
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
四、服役新數據節點
隨着公司業務的增長,數據量越來越大,原有的數據節點的容量已經不能滿足存儲數據的需求,需要在原有集羣基礎上動態添加新的數據節點。
【1】環境準備:
(1)在 hadoop2 主機上再克隆一臺 hadoop3主機;
(2)刪除原來HDFS文件系統留存的文件( /opt/module/hadoop-2.7.2/data和 logs ),否則會出現hadoop2與hadoop3相互出現在集羣中,因爲兩者的數據是相同的。所以集羣中只能出現一個,因此必須刪除 hadoop3 中的 /data與/logs 中的數據。
(4)source 一下配置文件
[root@hadoop4 hadoop-2.7.2]$ source /etc/profile
【2】服役新節點具體步驟:
(1)直接啓動 DataNode,即可關聯到集羣。因爲內部已經配置了關聯的 NameNode。
[root@hadoop4 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[root@hadoop4 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
【2】在hadoop3 上上傳文件
[root@hadoop3 hadoop-2.7.2]$ hadoop fs -put /opt/module/hadoop-2.7.2/LICENSE.txt /
【3】如果數據不均衡,可以用命令實現集羣的再平衡
[root@hadoop102 sbin]$ ./start-balancer.sh
starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-balancer-hadoop102.out
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved
五、添加白名單
添加到白名單的主機節點,都允許訪問 NameNode,不在白名單的主機節點,都會被退出。配置白名單的具體步驟如下:
【1】在 NameNode的 /opt/module/hadoop-2.7.2/etc/hadoop目錄下創建 dfs.hosts文件。添加如下主機名稱
hadoop1
hadoop2
【2】在 NameNode的 hdfs-site.xml配置文件中增加 dfs.hosts屬性
<property>
<name>dfs.hosts</name>
<value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
</property>
【3】配置文件分發
[root@hadoop1 hadoop]$ xsync hdfs-site.xml
【4】刷新NameNode
[root@hadoop1 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
【5】更新ResourceManager節點
[root@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
17/06/24 14:17:11 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033
【6】 如果數據不均衡,可以用命令實現集羣的再平衡
[root@hadoop1 sbin]$ ./start-balancer.sh
starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-balancer-hadoop102.out
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved
六、黑名單退役
在黑名單上面的主機都會被強制退出。
【1】在 NameNode的 /opt/module/hadoop-2.7.2/etc/hadoop目錄下創建 dfs.hosts.exclude文件。添加主機名稱(要退役的節點)
hadoop3
【2】在 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>
【3】刷新 NameNode、刷新 ResourceManager
[root@hadoop1 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
[root@hadoop1 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
17/06/24 14:55:56 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033
【4】 檢查Web瀏覽器,退役節點的狀態爲decommission in progress(退役中),說明數據節點正在複製塊到其他節點,等待退役節點狀態爲decommissioned(所有塊已經複製完成),停止該節點及節點資源管理器。注意:如果副本數是3,服役的節點小於等於3,是不能退役成功的,需要修改副本數後才能退役。
注意:不允許白名單和黑名單中同時出現同一個主機名稱。
七、Datanode多目錄配置
【1】DataNode 也可以配置成多個目錄,每個目錄存儲的數據不一樣。即:數據不是副本
【2】具體配置如下 hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>
----架構師資料,關注公衆號獲取----