1.文档编写目的
本篇文章主要介绍如何在CDH 5.16.2集群中获取所有Hive表的分区数、小文件数量、表大小。
- 文档概述
1.获取元数据信息
2.数据可视化
3.总结
- 测试环境
1.操作系统Redhat7.6
2.CDH5.16.2
3.使用root用户操作
4.MariaDB5.5.60
2.获取元数据信息
1.Hive数据库信息如下
2.登陆元数据库(也可以使用hive用户,但是没有权限把文件写入本地,可以采用记录会话的功能提取查询的信息)
代码语言:javascript复制[root@cdp1 ~]# mysql -u root -p
Enter password:
MariaDB [(none)]> use metastore;
MariaDB [metastore]> select concat(a.owner,'#',b.name,'#',a.tbl_name,'#',replace(c.location,'hdfs://nameservice1/','/')) tab_str from TBLS a,DBS b,SDS c where a.db_id=b.db_id and a.sd_id=c.sd_id and c.location like 'hdfs:%' into outfile '/tmp/table_date.txt';
3.查看获取的数据
代码语言:javascript复制[root@cdp01 ~]# cd /tmp/systemd-private-38cc5bd6395b4fb68e40998aa8d56a7e-mariadb.service-pa4Lao/tmp/
4.使用以下脚本获取数据
代码语言:javascript复制for line in $(grep -vE "^#|^$" table_date.txt)
do
tabpath=$(echo ${line}|awk -F"#" '{print $NF}')
tabstat=$(hdfs dfs -count "${tabpath}" 2>/dev/null|awk 'BEGIN{OFS="#"}{print $1,$2,$3}')
echo "${line}#${tabstat}" >> Htab_Data.txt
wc -l tabsizes.txt
done
5.执行脚本(如果数据量庞大可以把数据拆分为多个文件,同时执行多个脚本处理)
代码语言:javascript复制 [root@cdp01 tmp]# nohup sh tabdata.sh &
采用nohup的方式执行命令主要是为了让脚本在后台执行,防止中途出现脚本断掉
6.查看脚本是否跑完
代码语言:javascript复制[root@cdp01 tmp]# wc -l table_date.txt
[root@cdp01 tmp]# wc -l Htab_Data.txt
7.把跑完的数据拿到本地
代码语言:javascript复制[root@cdp01 tmp]# sz Htab_Data.txt
3.数据可视化
1.创建excel表并导入数据
2.点击“获取数据”,并设置分列格式
3.选择其他添加“#”,点击完成
4.导入完成信息如下
5.可以对表格进行小文件数量,或者表大小排序,整理完成如下。(如果需对表大小进行单位展示,可以对表大小列进行除1024等于KB,再除1024等于MB依此累加)
4.总结
1.获取元数据信息也可以采用hive用户,但是没有权限把文件写入本地,可以采用记录会话的功能提取查询的信息。
2.如果表数量过多可以把从元数据库导出到信息拆分为多个文件,多个脚本同时执行。
3.CDH和CDP的统计方式相同。
4.统计完数据后,可以更明确的了解Hive的各张表信息情况,并且可以采用此表信息进行小文件合并,提升集群性能。