在HDFS集群的運維過程中,肯定會遇到DataNode的新增和刪除,即上線與下線。這篇文章就詳細講解下DataNode的上線和下線的過程。
背景
在我們的微職位視頻課程中,我們已經安裝了3個節點的HDFS集群,master機器上安裝了NameNode和SecondaryNameNode角色,slave1和slave2兩台機器上分別都安裝了DataNode角色。
我們現在來給這個HDFS集群新增一個DataNode,這個DataNode是安裝在master機器上
我們需要說明的是:在實際環境中,NameNode和DataNode最好是不在一台機器上的,我們這里都放在master上,是因為我們的虛擬機資源有限。
我們現在啟動master、slave1和slave2三台虛擬機,然后啟動HDFS集群,我們在HDFS的Web UI上可以看到有兩個DataNode:
DataNode上線
在NameNode所在的機器(master)上的配置文件hdfs-site.xml中增加"白名單"配置:
<property> <!-- 白名單信息--> <name>dfs.hosts</name> <value>/home/hadoop-twq/bigdata/hadoop-2.7.5/etc/hadoop/dfs.include</value> </property>
在master機器上執行下面的命令:
## 創建白名單文件 touch /home/hadoop-twq/bigdata/hadoop-2.7.5/etc/hadoop/dfs.include
在/home/hadoop-twq/bigdata/hadoop-2.7.5/etc/hadoop/dfs.include
文件中增加如下內容:
slave1 slave2 master
其中,上面的master
是新增的DataNode所在的機器
在/home/hadoop-twq/bigdata/hadoop-2.7.5/etc/hadoop/slaves
文件中新增:
master
3.然后在NameNode所在的機器(master)上執行如下的命令:
hdfs dfsadmin -refreshNodes
然后,我們在HDFS的Web UI上查看DataNode的信息:
可以看出,多了一個狀態為Dead
的DataNode
可以看出,多了一個狀態為Dead
的DataNode
4.在master機器上啟動DataNode:
hadoop-daemon.sh start datanode
然后我們刷新HDFS的Web UI的DataNode信息,如下圖:
可以看出,DataNode現在是3個了,master上的DataNode已經啟動起來,並且加入集群中
DataNode的下線
我們現在下線master上的DataNode,步驟如下:
- 在NameNode所在的機器(master)上的配置文件hdfs-site.xml中增加"黑名單"配置:
<property> <!-- 黑名單信息--> <name>dfs.hosts.exclude</name> <value>/home/hadoop-twq/bigdata/hadoop-2.7.5/etc/hadoop/dfs.exclude</value> </property>
在master機器上執行下面的命令:
## 創建黑名單文件 touch /home/hadoop-twq/bigdata/hadoop-2.7.5/etc/hadoop/dfs.exclude
在/home/hadoop-twq/bigdata/hadoop-2.7.5/etc/hadoop/dfs.exclude
文件中增加如下內容:
master
其中,上面的master
是需要下線的DataNode所在的機器
在/home/hadoop-twq/bigdata/hadoop-2.7.5/etc/hadoop/slaves
文件中刪除master
行
然后在NameNode所在的機器(master)上執行如下的命令:
hdfs dfsadmin -refreshNodes
然后我們刷新HDFS的Web UI的DataNode信息,如下圖:
這個時候,master上的DataNode的狀態變為Decommission In Progress
。這個時候,在master上的DataNode的數據都在復制轉移到其他的DataNode上,當數據轉移完后,我們再刷新HDFS Web UI后,可以看到DataNode的狀態變為Decommissioned
,表示這個DataNode已經下線,如下圖:
4. 在master上停止DataNode:
hadoop-daemon.sh stop datanode
5.刷新DataNode:
hdfs dfsadmin -refreshNodes