HDFS 之 DataNode 核心知識點

目錄

一、DataNode工作機制

二、數據完整性

三、掉線時限參數設置

四、服役新數據節點

五、添加白名單

六、黑名單退役

七、Datanode多目錄配置


一、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>


----架構師資料,關注公衆號獲取----

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