DataNode增加数据目录进行扩容以及UUID不一致问题
增加DataNode数据目录进行扩容
HDFS在使用过程中,随着使用时间的不断增长,存储的数据越来越多,可能会出现磁盘容量不够的情况,这时候可以进行扩容,增加DataNode的数据目录。笔者使用的是CDH环境,所以直接通过CLOUDERA MANAGER进行配置:
- 我要增加的目录为:/home/data/,所以首先第一步,在这个目录下新建 /home/data/dfs/dn 目录。 mkdir -p /data3/dfs/dn
mkdir -p /home/data/dfs/dn
- 然后修改dn目录的权限:
chown -R hdfs:hadoop /home/data/dfs/dn
-
针对每个DataNode,重复上面的1、2步。完成后打开cloudera manager 管理页面,选择HDFS:
-
选择具体的DataNode实例,进入详情页,选择 “配置”,在 “DataNode” 选项中,选择 “DataNode Data Directory”,点击右侧加号,增加目录:
-
进入 “高级”(advanced) 选项,第一个“ DataNode Volume Choosing Policy ” 卷选择策略,选择 “available space可用空间” 。然后保存修改,重启该DataNode。
重启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这些是不一样的,不要修改。