0860-5.16.2-如何统计Hive表的分区数、小文件数量和表大小

2021-08-23 15:19:51 浏览数 (1)

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的各张表信息情况,并且可以采用此表信息进行小文件合并,提升集群性能。

0 人点赞