栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

hive:统计hive中所有表的大小和创建时间

hive:统计hive中所有表的大小和创建时间

目的:获取hive中所有表的创建时间和表大小

本文给出了一个既可以统计hive中非分区表也可以统计分区表的表大小的方式。
由于业务上没有针对分区数据统计的需求,所以可以使用此种方式统计。
如果业务需要统计分区数据,这种方式就不合适了。

1、获取hive当前的表创建时间和表名

在hive的元数据存储数据库中执行(当前为mysql):

SELECt	CREATE_TIME,TBL_NAME FROM	TBLS ;

结果文件存储在:all_tables_name_createTime.txt(内容见第3点)

2、获取当前hdfs中hive库表存储路径和大小

hive_data_size_count.sh

#!/bin/env bash
HIVE_WAREHOUSE=/user/hive/warehouse
ALL_DATAbaseS=(`hdfs dfs -ls ${HIVE_WAREHOUSE} | awk '{print $8}'`)

for i in ${!ALL_DATAbaseS[@]}
do
 echo "当前库${ALL_DATAbaseS[i]}的大小:"
 hdfs dfs -du -h ${HIVE_WAREHOUSE} | grep ${ALL_DATAbaseS[i]}
 echo "当前库内表的大小"
 hdfs dfs -du -h ${ALL_DATAbaseS[i]}
 echo -e "nn"
done

结果文件存储在:hive_data_count6(文件内容见第4点)

3、将1中获取的hive创建时间转换为易读性好的格式

脚本名称:changeTimeFormat.sh
将有两列字段——hive表创建的时间(时间戳形式)、hive表名——的文件中,时间戳修改为阅读友好型的年月日时分秒形式。

#!/bin/env bash
while read line
do
 echo $line
 TIMESTAMP=`echo $line | awk '{print $1}'`
 TABLE_NAME=`echo $line | awk '{print $2}'`
 if [[ $TIMESTAMP -ne "CREATE_TIME" ]];then
 # 格式为:年月日|时分秒,之所以使用|作为间隔符,是因为文件是以t制表符作为间隔,防止空格和制表符在使用echo命令时候无法将时间以整个字段进行分隔
 TIME_FORMAT=`date -d @$TIMESTAMP "+%Y-%m-%d|%H:%M:%S"`
 else
 TIME_FORMAT="CREATE_TIME"
 fi
 echo -e "$TIME_FORMATt$TABLE_NAME" >> all_tables_name_createTimeFormat.txt
done 

源文件:all_tables_name_createTime.txt文件示例(间隔符是t,制表符)

CREATE_TIME TBL_NAME
1618910542 yjj_bzy
1619074492 ods_yjj_bzy
1619075278 stg_yjj_bzy
1620637222 wxm_ods_test_2021_5_10

结果文件:all_tables_name_createTimeFormat.txt (间隔符是t,制表符)

CREATE_TIME TBL_NAME
2021-04-20|17:22:22 yjj_bzy
2021-04-22|14:54:52 ods_yjj_bzy
2021-04-22|15:07:58 stg_yjj_bzy
2021-05-10|17:00:22 wxm_ods_test_2021_5_10
4、获得表的创建时间和大小

脚本名称:combineNameTimeSize.sh
脚本目的是从hdfs的/user/hive/warehouse目录中得到的表内容中获取hive元数据中实际存在的hive表的大小和创建时间

#!/bin/env bash

# bei pipei de wenjian
SOURCE_FILE=all_tables_name_createTimeFormat.txt
FILTER_FILE="hive_data_count6"
RESOUT_FILE=hive_table_name_size_time.txt

while read line
do
 TIME=`echo $line | awk '{print $1}'`
 TABLE_NAME=`echo $line | awk '{print $2}'`

 HIVE_TABLE_SIZE_PATH=`cat $FILTER_FILE | grep $TABLE_NAME`
 TABLE_SIZE=`echo $HIVE_TABLE_SIZE_PATH | awk '{print $1}'`
 HDFS_PATH=`echo $HIVE_TABLE_SIZE_PATH | awk '{print $2}'`

 if [[ "$TIME" -eq "CREATE_TIME" ]];then
 echo -e "$TIMEt$TABLE_NAMEtTABLE_SIZEtHDFS_PATH" >> $RESOUT_FILE
 else
 echo -e "$TIMEt$TABLE_NAMEt$TABLE_SIZEt$HDFS_PATH" >> $RESOUT_FILE
 fi
done < $SOURCE_FILE

被过滤的hdfs数据文件:hive_data_count6
(数据获取方式:hdfs dfs -du -h /user/hive/warehouse)

37.1K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_gc_info_i_y
12.7K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_hw_gdccrb_i_d
7.6K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_hw_gdfsfdcrb_i_d
4.2K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_hw_xlljjsczrb_i_d
5.7K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_hw_xlslyczqkrb_i_d
12.9K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_hw_yjswclzxclrb_a_d
10.7K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_js_ssljflxqinfo_i_d
2.7K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_js_vehicleinfo_i_m
1.8M /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_sr_store_i_d
13.9K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_zxc_station_a_d

结果数据:hive_table_name_size_time.txt

CREATE_TIME TBL_NAME TABLE_SIZE HDFS_PATH
2021-04-20|17:22:22 yjj_bzy 27.1K /user/hive/warehouse/ods.db/ods_yjj_bzy
2021-04-22|14:54:52 ods_yjj_bzy 27.1K /user/hive/warehouse/ods.db/ods_yjj_bzy
2021-04-22|15:07:58 stg_yjj_bzy 636.7K /user/hive/warehouse/stg.db/stg_yjj_bzy
2021-05-10|17:00:22 wxm_ods_test_2021_5_10 117.1K /user/hive/warehouse/test_hive2.db/wxm_ods_test_2021_5_10
2021-05-10|11:11:53 t_czfwjcxxb_wxm 1.1M /user/hive/warehouse/ods_zfw.db/t_czfwjcxxb_wxm

5、将hive_table_name_size_time.txt文件的内容拷贝到excel表格中,即可形成4列的数据表,便于数据统计

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/753474.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号