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

Posted

技术标签:

【中文标题】如何找出 Hive 数据库的总大小【英文标题】:How to find out Total size of the Hive Database 【发布时间】:2019-05-03 05:04:38 【问题描述】:

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

一些表位置是 /apps/hive/warehouse/

一些表位置是 /warehouse/hive/managed/

一些表位置是 /warehouse/hive/external/

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

【问题讨论】:

这很有用***.com/a/34632292/2700344 这是如何解析位置的示例:***.com/a/43804621/2700344 【参考方案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 中的实际大小,包括复制。

它是如何工作的?

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

    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.检查 Hive Metastore 表中表的不同参数 - TABLE_PARAMS 用于 id 为 5783 的同一 Hive 表。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 du -s HDFS 的同一张表的输出。 324和972分别是HDFS中表数据一副本和三副本的大小。

324  972  /user/hive/warehouse/test12345

希望这会有所帮助!

【讨论】:

以上是关于如何找出 Hive 数据库的总大小的主要内容,如果未能解决你的问题,请参考以下文章

如何查找对象分配的总内存[重复]

蜂巢中的数据集大小是多少

高速查询hive数据仓库表中的总条数

如何确定要读取的 QIODevice 的总大小?

有没有办法计算 MySql 中列的总数据大小?

获取附加到特定数据库的所有森林的总大小