DataNode增加数据目录进行扩容以及UUID不一致问题

时间:2024-03-14 15:52:52

DataNode增加数据目录进行扩容以及UUID不一致问题

增加DataNode数据目录进行扩容

HDFS在使用过程中,随着使用时间的不断增长,存储的数据越来越多,可能会出现磁盘容量不够的情况,这时候可以进行扩容,增加DataNode的数据目录。笔者使用的是CDH环境,所以直接通过CLOUDERA MANAGER进行配置:

  1. 我要增加的目录为:/home/data/,所以首先第一步,在这个目录下新建 /home/data/dfs/dn 目录。 mkdir -p /data3/dfs/dn
 mkdir -p /home/data/dfs/dn
  1. 然后修改dn目录的权限:
chown -R hdfs:hadoop /home/data/dfs/dn
  1. 针对每个DataNode,重复上面的1、2步。完成后打开cloudera manager 管理页面,选择HDFS:
    DataNode增加数据目录进行扩容以及UUID不一致问题

  2. 选择具体的DataNode实例,进入详情页,选择 “配置”,在 “DataNode” 选项中,选择 “DataNode Data Directory”,点击右侧加号,增加目录:
    DataNode增加数据目录进行扩容以及UUID不一致问题

  3. 进入 “高级”(advanced) 选项,第一个“ DataNode Volume Choosing Policy ” 卷选择策略,选择 “available space可用空间” 。然后保存修改,重启该DataNode。
    DataNode增加数据目录进行扩容以及UUID不一致问题

重启UUID不一致问题

在上面增加目录之后,重启的过程中报错:

Failed to add storage directory [DISK]file:/home/data/dfs/dn/
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException:
 Directory /home/data/dfs/dn is in an inconsistent state: 
 Root /home/data/dfs/dn: DatanodeUuid=feed2795-4dfc-4fb8-bafa-e8dde1dd6bc7,
 does not match 135f1043-76bd-4ed6-aed4-19100679af3b from other StorageDirectory.
	at org.apache.hadoop.hdfs.server.datanode.DataStorage.setFieldsFromProperties(DataStorage.java:702)
	at org.apache.hadoop.hdfs.server.datanode.DataStorage.setFieldsFromProperties(DataStorage.java:657)
	at org.apache.hadoop.hdfs.server.common.StorageInfo.readProperties(StorageInfo.java:232)
	at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:759)
	at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadStorageDirectory(DataStorage.java:302)
	at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadDataStorage(DataStorage.java:418)
	at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:397)
	at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:575)
	at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1560)
	at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1520)

查看对应的两个文件:

原生目录:/dfs/dn/current/VERSION
新增目录:/home/data/dfs/dn/current/VERSION
新增目录下的这个文件应该是第一次重启的过程中自动生成的

文件内容大致如下:

#Thu Nov 15 17:45:10 CST 2018
storageID=DS-6e4a9420-ebb8-4fd8-aac7-f016fae2e2f3
clusterID=cluster20
cTime=0
datanodeUuid=5d492e79-180a-4198-af90-d4e3422f8445
storageType=DATA_NODE
layoutVersion=-56

其中,有一个datanodeUuid,发现两个文件的datanodeUuid不一致,所以会报此错误,将原生目录下该文件的UUID复制到新增目录下文件对应的UUID,重启成功。注意不要整个文件复制,其他地方比如storageID这些是不一样的,不要修改。