且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

hive中表状态数据的获取

更新时间:2022-09-10 08:10:25

在做容量规划的时候,我们需要关注hive中表的占用空间大小,文件数量,平均文件大小,已及存储格式,虽然在hive中也有statistcs的功能,但是值并准确(相比mysql的show table status相差很多)

我们可以通过一些简单地方法去拿到这个值,比如通过hadoop fs -du 来获取表占用的空间大小,通过hadoop fs -count获取表的文件数量,然后定期取值并load到数据库中。

在元数据库中,通过创建view来获取数据库,hdfs路径,表类型,存储格式等信息


1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE VIEW table_location_type AS SELECT CONCAT_WS('.',a.NAME,b.TBL_NAME) AS db_table,SUBSTR(c.LOCATION,18) AS db_location,b.TBL_TYPE AS type,SUBSTRING_INDEX(c.INPUT_FORMAT, '.', -1)
AS IN_FOR FROM dbs a,tbls b,sds c WHERE a.DB_ID=b.DB_ID AND b.SD_ID=c.SD_ID;
数据如下:
select from table_location_type limit 5;
+----------------------------------+---------------------------------------------------------+---------------+-------------------+
| db_table                         | db_location                                             | type          | IN_FOR            |
+----------------------------------+---------------------------------------------------------+---------------+-------------------+
| xxxx         | /bip/hive_warehouse/cdnlog.db/dnion_log_origin          | MANAGED_TABLE | TextInputFormat   |
| xxxx     | /bip/hive_warehouse/cdnlog.db/chinacache_log_origin     | MANAGED_TABLE | TextInputFormat   |
| xxxx | /bip/hive_warehouse/cdnlog.db/chinanetcenter_log_origin | MANAGED_TABLE | TextInputFormat   |
| xxxxx                 | /bip/hive_warehouse/cdnlog.db/dnion_log                 | MANAGED_TABLE | RCFileInputFormat |
| xxxx        | /bip/hive_warehouse/cdnlog.db/chinanetcenter_log        | MANAGED_TABLE | RCFileInputFormat |
+----------------------------------+---------------------------------------------------------+---------------+-------------------+

然后通过和我们自己收集的信息做join就可以获取相关的数据:

比如文件数量最多top 20

1
2
3
select a.db_table as tb,round(b.size/(1024*1024*1024),2) as size,c.size as num,round(b.size/(c.size*1024*1024),2) as avg,
a.type,a.in_for from table_location_type  a,file_size b,file_num  c where a.db_location=b.location and a.db_location=c.location and c.dt='20140325'
and b.dt='20140325' and c.size > 0 and b.size > 1000000000 order by c.size+0 desc limit 20;

在实际的使用中,我们收集了文件数最多的表,占用空间最大的表,平均文件最小的表,并通过报表的形式方式处理,这样就可以简单了解到hive中表的一些信息,另外还会收集一些job的信息,比如job的map和reduce的数量,使用情况等,对job做详细的分析和优化。

报表如下:

hive中表状态数据的获取



本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1385603,如需转载请自行联系原作者