问题说明
HDFS的Fsimage文件记录了集群的元数据信息,是进行集群健康度分析的基础。利用HDFS oiv命令可以解析fsimage文件,解析后的文件放入Hive中即可进行集群元数据的详细分析。
运行以下命令,获取hdfs集群的fsimage文件,并使用oiv命令进行解析
#获取fsimage文件
hdfs dfsadmin -fetchImage ./tmp_meta
#使用oiv命令将fsimage文件解析为csv文件
hdfs oiv -i ./tmp_meta/* -o ./tmp_meta/fsimage.csv -p Delimited
异常信息如下
解决方案
解析fsimage文件出现OOM,初步考虑是HDFS Client的java heap设置小了,于是尝试在hdfs oiv命令前指定HADOOP_CLIENT_OPTS
HADOOP_CLIENT_OPTS="-Xmx10240m" hdfs oiv -i ./tmp_meta/* -o ./tmp_meta/fsimage.csv -p Delimited
发现依旧OOM,随后将该参数从10G调整到20G,并未解决该问题
查看hdfs oiv命令的help发现了一个-t参数,使用临时目录缓存中间结果来生成oiv命令的解析结果,可以缓解内存的压力。
关于hdfs oiv的官网介绍:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsImageViewer.html#Overview
最终在oiv命令中带上-t参数,问题解决
hdfs oiv -i ./tmp_meta/* -t ./temp/dir -o ./tmp_meta/fsimage.csv -p Delimited
参考链接
https://community.cloudera.com/t5/Community-Articles/How-to-read-fsimage/ta-p/248832