如何找出 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 数据库的总大小的主要内容,如果未能解决你的问题,请参考以下文章