本文介绍NameNode或JournalNode的editlogs目录占用较大磁盘空间的解决方案。

问题原因

HDFS依赖FsImage Checkpoint进行editlogs合并,当FsImage Checkpoint出现异常时,会导致editlogs无法合并,通常异常情况是由于FsImage目录写满或磁盘异常等情况引起的,此时NameNode重启时间也会变得很长。NameNode FsImage Checkpoint失败后,该FsImage目录默认不会再次使用,需要设置开启FsImage目录自恢复功能。

解决方案

  1. 手动开启FsImage目录自恢复选项。
    su - hdfs
    hdfs dfsadmin -restoreFailedStorage true
    说明 手动开启FsImage目录自恢复选项,重启后失效。
    开启成功后NameNode后续自动FsImage Checkpoint时,会先尝试恢复FsImage目录。
    restoreFailedStorage is set to true
  2. 可选:手动NameNode Checkpoint,详情请参见手动进行NameNode checkpoint
    手动Checkpoint后会立刻触发editlogs合并,可以快速减少editlogs产生的磁盘占用,但是需要NameNode进入到SafeMode,并会造成短暂的HDFS不可用。
  3. 默认开启FsImage目录自恢复功能。
    在E-MapReduce控制台的HDFS服务页面,选择配置 > hdfs-site.xml ,添加参数为dfs.namenode.name.dir.restore,值为true的自定义配置,下次重启NameNode后FsImage目录自恢复功能会自动打开。