hadoop—在ApacheHive中,具有大量外部表的db删除级联所需的时间太长

kg7wmglp  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(320)

我已经找到了很多关于如何删除一个db及其所有表的答案,但是没有找到任何关于为什么每个表需要3-4秒才能删除的答案,似乎是串行的(一个接一个)。
我有一个数据库,有2414个指向Parquet地板位置的外部表 DROP DATABASE <db> CASCADE; 删除数据库的元数据可能需要1-2个小时。
在一个单独的会议上,我可以重复 SHOW TABLES IN <deleted DB>; 观察table的数量以每3-4秒1的速度下降。在会话释放delete之前,这需要2个多小时,并允许我们用一个新的db替换db。。。

504 rows selected (0.29 seconds)
...
503 rows selected (0.17 seconds)
...
502 rows selected (0.29 seconds)
...

为什么Hive这么久?有没有一个配置我可以使用,使它更快?有没有办法让我知道这段时间它在做什么?
我想如果这个问题更常见的话,其他人也会遇到这个问题,所以我觉得我有一个可以调整的设置来解决这个问题(?)。。。
parquets似乎不会在删除的数据库下被删除,因此它似乎与hdfs/parquet文件没有任何关系,除非删除外部表会出于任何原因检查它们。。。
你知道为什么会这么慢吗?

g52tjvyc

g52tjvyc1#

好吧,它必须删除所有的参考资料。它可以是外部表,但万一元存储中有很多分区、统计信息等。另外,如果它有很多行,它需要获取特定的锁。您可能需要检查metastore(mysql或等效的)并查看是否可以定期引入索引或收集统计信息。

相关问题