如何找出Hive数据库的总大小

时间:2019-05-03 05:04:39

标签: database hadoop hive

我有一个包含10个表的数据库。所有10个表格数据都存储在不同的位置。在10个表中,有些是托管表,有些是外部表。

某些表的位置是/ apps / hive / warehouse /

某些表的位置是/ warehouse / hive / managed /

某些表的位置是/ warehouse / hive / external /

有什么方法可以找出数据库的总大小,而不必进入每个位置并找到大小,还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

以下查询在Hive Metastore DB中运行时,将帮助您获取Hive中所有表占用的总大小。 注意:仅当所有表的统计信息都已更新时,您才能从此查询中获得100%正确的结果。 [这可以在表-Metastore DB中的TABLE_PARAMS中进行检查,我下面也会提到(它如何工作?.b)]

步骤:

1。。登录到Hive Metastore DB并使用hive使用的数据库。默认为hive1

2。。完成后,您可以执行以下查询以获取Hive中所有表的总大小(以字节为单位)。该查询将基于表的统计信息获取所有Hive表的总大小。

    MariaDB [hive1]> SELECT SUM(PARAM_VALUE) FROM TABLE_PARAMS WHERE PARAM_KEY="totalSize";
    +------------------+
    | SUM(PARAM_VALUE) |
    +------------------+
    |   30376289388684 |
    +------------------+
    1 row in set (0.00 sec)```

3。。请记住,上面得出的结果仅适用于一次复制。 30376289388684 x 3是HDFS中包含复制的实际大小。

它如何工作?

a。从Hive Metastore DB的TBLS表中选择ID为5783,名称为test12345的Hive中的随机表。

    MariaDB [hive1]> SELECT * FROM TBLS WHERE TBL_ID=5783;
    +--------+-------------+-------+------------------+-------+-----------+-------+-----------+---------------+--------------------+--------------------+----------------+
    | TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER | RETENTION | SD_ID | TBL_NAME  | TBL_TYPE      | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT | LINK_TARGET_ID |
    +--------+-------------+-------+------------------+-------+-----------+-------+-----------+---------------+--------------------+--------------------+----------------+
    |   5783 |  1555060992 |     1 |                0 | hive  |         0 | 17249 | test12345 | MANAGED_TABLE | NULL               | NULL               |           NULL |
    +--------+-------------+-------+------------------+-------+-----------+-------+-----------+---------------+--------------------+--------------------+----------------+
    1 row in set (0.00 sec)

b。检查ID为5783的同一Hive表的Hive Metastore表-TABLE_PARAMS中表的不同参数。totalSize记录指示此表在其副本之一中在HDFS中占用的总大小。可以比较下一个点(c),即hdfs du -s进行检查。

具有值COLUMN_STATS_ACCURATE的参数true表示表的统计信息属性设置为true。您可以检查此值为false的表,以查看Hive中是否有任何表可能缺少统计信息。

MariaDB [hive1]> SELECT * FROM TABLE_PARAMS
    -> WHERE TBL_ID=5783;
+--------+-----------------------+-------------+
| TBL_ID | PARAM_KEY             | PARAM_VALUE |
+--------+-----------------------+-------------+
|   5783 | COLUMN_STATS_ACCURATE | true        |
|   5783 | numFiles              | 1           |
|   5783 | numRows               | 1           |
|   5783 | rawDataSize           | 2           |
|   5783 | totalSize             | 324         |
|   5783 | transient_lastDdlTime | 1555061027  |
+--------+-----------------------+-------------+
6 rows in set (0.00 sec)

c。从HDFS hdfs du -s输出同一表。 324和972是HDFS中表数据的一个和三个副本的大小。

324  972  /user/hive/warehouse/test12345

希望这会有所帮助!