温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1
文章编写目的
随着Hadoop集群数据量的增长,集群中也同时会存在大量的小文件,即文件Size比HDFS的Block Size(默认128MB)小的多的文件。Hadoop集群中存在大量的小文件对集群造成的影响如下:
1.对NameNode的内存造成很大的压力以及性能问题,在HDFS中任何文件、目录或者block在NameNode内存中均以对象的方式表示(即元数据),默认每个元数据对象约占150bytes。
2.HDFS在存储小文件上效率会很低,同样在读取上也会导致大量的查找,在各个DN节点去检索小文件。
在前面的文章Fayson介绍了《如何在Hadoop中处理小文件》,《如何使用Impala合并小文件》和《如何在Hadoop中处理小文件-续》。基于上述原因Fayson主要介绍如何通过离线分析HDFS的FsImage的方式查找集群中的小文件。
- 内容概述
1.FsImage分析脚本
2.FsImage数据转存到Impala表中
3.各个维度分析查找集群中的小文件
4.总结
- 测试环境
1.CM和CDH版本为5.15
2
离线FsImage分析脚本
本篇文章Fayson的分析脚本主要基于HDFS提供的oiv命令来进行FsImage离线分析,将FsImage文件解析问指定的csv格式数据,如下脚本分析的具体步骤:
1.使用hdfs命令获取FsImage数据文件
[root@cdh02 fsimage]# hdfs dfsadmin -fetchImage ./tmp_meta
(可左右滑动)

2.使用hdfs oiv命令解析FsImage文件
[root@cdh02 fsimage]# hdfs oiv -i ./tmp_meta/fsimage_0000000000008236656 -o ./tmp_meta/fsimage.csv -p Delimited
(可左右滑动)

3.将解析的csv文件加载到Hive的HDFS_META_TEMP表中
[root@cdh02 fsimage]# sed -i -e "1d" ./tmp_meta/fsimage.csv
[root@cdh02 fsimage]# hdfs dfs -rmr /tmp/hdfs_metadata/fsimage
[root@cdh02 fsimage]# hdfs dfs -mkdir -p /tmp/hdfs_metadata/fsimage
[root@cdh02 fsimage]# hdfs dfs -copyFromLocal ./tmp_meta/fsimage.csv /tmp/hdfs_metadata/fsimage
(可左右滑动)

4.使用Sqoop脚本将Hive元数据中关于Hive库和表的信息抽取的Hive中
sqoop import \
--connect "jdbc:mysql://${DB_IPADDR}:${DB_PORT}/${META_DB_NAME}" \
--username ${
DB_USERNAME} \
--password ${
DB_PASSWORD} \
--query 'select c.NAME,c.DB_LOCATION_URI,a.TBL_NAME,a.OWNER,a.TBL_TYPE,b.LOCATION from TBLS a,SDS b,DBS c where a.SD_ID=b.SD_ID and a.DB_ID=c.DB_ID and $CONDITIONS' \
--fields-terminated-by ',' \
--

本文介绍了一种通过离线分析HDFS的FsImage文件来查找Hadoop集群中小文件的方法,包括使用oiv命令解析FsImage,将数据导入Impala表进行多维度分析,以及基于HDFS目录和Hive表的统计分析。
最低0.47元/天 解锁文章
2887

被折叠的 条评论
为什么被折叠?



