hadoop(DataNode)

DataNode工作機制

在這裏插入圖片描述

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

數據完整性

思考:
如果DataNode磁盤中存儲的數據是控制紅綠燈的紅燈信號(1)和綠燈(0),但是存儲該數據的磁盤壞了,一直顯示是綠燈,是否很危險?同理,DataNode節點上的數據損壞了,卻沒有發現,也是很危險的,那麼如何解決呢?


如下是DataNode節點保證數據完整性的方法

  1. 當DataNode讀取Block的時候,它會計算CheckSum。
  2. 如果計算後的CheckSum,與Block創建時值不一樣,說明Block已經損壞。
  3. Client讀取其他DataNode上的Block。
  4. DataNode在其文件創建後周期驗證CheckSum。

掉線時限參數設置

在這裏插入圖片描述

  1. DataNode進程死亡或者網絡故障造成DataNode無法與NameNode通信。
  2. NameNode不會立即把該節點判定爲死亡,要經過一段時間,這段時間暫稱作超時時長
  3. HDFS默認的超時時長爲10分鐘+30秒。
  4. 如果定義超時時間爲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的單位爲

服役新數據節點

需求:
隨着公司業務的增長,數據量越來越大,原有的數據節點的容量已經不能滿足存儲數據的需求,需要在原有集羣基礎上動態添加新的數據節點。


  1. 環境準備
  1. 在hadoop104主機上再克隆一臺hadoop105主機
  2. 修改IP地址和主機名稱
  3. 刪除原來HDFS文件系統留存的文件(/opt/module/hadoop-2.7.2/data和log)
  4. source配置文件

[redhat@hadoop105 hadoop-2.7.2]$ source /etc/profile

2.服役新節點具體步驟

  1. 直接啓動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
在這裏插入圖片描述

  1. 在hadoop105上上傳文件

[redhat@hadoop105 hadoop-2.7.2]$ hadoop fs -put /opt/module/hadoop-2.7.2/LICENSE.txt /

  1. 如果數據不均衡,可以用命令實現集羣的再平衡

[redhat@hadoop102 sbin]$ ./start-balancer.sh

爲什麼不在slave文件中寫入hadoop105?
答: 因爲啓動是在hadoop105上進行的單點啓動,slave只在NameNode羣起集羣時有用

退役舊數據節點

當集羣運行一段時間後,一些舊的節點因爲性能等等原因需要下線,將業務轉移到其他的服務器上。對於退役節點的做法,一般有兩種:添加黑名單添加白名單


添加黑名單

  1. 在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

  1. 在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>

  1. 刷新NameNode、刷新ResourceManager

[redhat@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes

[redhat@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes

  1. 檢查Web瀏覽器,退役節點的狀態爲decommission in progress(退役中),說明數據節點正在複製塊到其他節點

在這裏插入圖片描述

  1. 等待退役節點狀態爲decommissioned(所有塊已經複製完成),停止該節點及節點資源管理器。注意:如果副本數是3,服役的節點小於等於3,是不能退役成功的,需要修改副本數後才能退役

在這裏插入圖片描述

  1. 如果數據不均衡,可以用命令實現集羣的再平衡
    [redhat@hadoop102 hadoop-2.7.2]$ sbin/start-balancer.sh

添加白名單
添加到白名單的主機節點,都允許訪問NameNode,不在白名單的主機節點,都會被退出。

  1. 在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

  1. 在NameNode的hdfs-site.xml配置文件中增加dfs.hosts屬性

<property>
<name>dfs.hosts</name>
<value>/opt/module/hadoop-2.7.2/etc/hadoop/writetxt</value>
</property>

  1. 配置文件分發

[redhat@hadoop102 hadoop]$ xsync hdfs-site.xml

  1. 刷新NameNode

[redhat@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful

  1. 更新ResourceManager節點

[redhat@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes

  1. 在web瀏覽器上查看

在這裏插入圖片描述

  1. 如果數據不均衡,可以用命令實現集羣的再平衡

[redhat@hadoop102 hadoop-2.7.2]$ sbin/start-balancer.sh


黑名單中指定的hadoop105,退役後在hadoop的集羣中它還是存在的,且hadoop還在不斷和hadoop105聯繫;但是白名單中未指定的hadoop105則是在hadoop集羣中直接被除名了

所以可以發現:黑名單對待退役節點比較“溫和”,白名單對待退役節點沒有什麼“人情味”,所以退役節點應該選擇黑名單,白名單更多是被用來增加集羣安全性的,而不是用來退役節點的

DataNode多目錄配置

  1. DataNode也可以配置成多個目錄,每個目錄存儲的數據不一樣。即:數據不是副本
  2. 具體配置如下
    hdfs-site.xml

<property>
<name>dfs.datanode.data.dir
<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>

  1. 關閉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

  1. 格式化集羣並啓動

[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

  1. 查看結果
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章