1.增加DataNode数据目录进行扩容
HDFS在使用过程中,随着使用时间的不断增长,存储的数据越来越多,可能会出现磁盘容量不够的情况,这时候可以进行扩容,增加DataNode的数据目录。笔者使用的是CDH环境,所以直接通过CLOUDERA MANAGER进行配置:
我要增加的目录为:/home/data/,所以首先第一步,在这个目录下新建 /home/data/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。
2.重启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=22fec7f1-3b7f-45e2-8e14-76ad61510d68,does not match 7595807e-7c97-4f04-a01d-670cfdbd49b6 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)
3.问题分析及解决方法
查看对应的两个文件:
原生目录:/dfs/dn/current/VERSION
新增目录:/home/data/dfs/dn/current/VERSION
新增目录下的这个文件应该是第一次重启的过程中自动生成的
/dfs/dn/current/VERSION文件内容大致如下:
#Thu Jun 16 17:12:18 CST 2022storageID=DS-cce84ae5-b79d-4467-ba29-e3469d701512clusterID=CID-7f9a222f-7655-4f5e-83b6-cb7c5003a267cTime=0datanodeUuid=7595807e-7c97-4f04-a01d-670cfdbd49b6storageType=DATA_NODElayoutVersion=-57
/home/data/dfs/dn/current/VERSION文件内容大致如下:
#Thu Jun 16 17:33:17 CST 2022storageID=DS-9ac0227c-f48b-49f0-bfe6-ed561510fe46clusterID=CID-7f9a222f-7655-4f5e-83b6-cb7c5003a267cTime=0datanodeUuid=22fec7f1-3b7f-45e2-8e14-76ad61510d68storageType=DATA_NODElayoutVersion=-57
其中,有一个datanodeUuid,发现两个文件的datanodeUuid不一致,所以会报此错误,将原生目录下该文件的UUID复制到新增目录下文件对应的UUID,重启成功。注意不要整个文件复制,其他地方比如storageID这些是不一样的,不要修改。
