Hive: DROP TABLE IF EXISTS <Table Name> 不释放内存

Posted

技术标签:

【中文标题】Hive: DROP TABLE IF EXISTS <Table Name> 不释放内存【英文标题】:Hive: DROP TABLE IF EXISTS <Table Name> does not free memory 【发布时间】:2015-03-09 15:45:20 【问题描述】:

当我在 hive 中使用 DROP TABLE IF EXISTS &lt;Table Name&gt; 时,它并没有释放内存。这些文件创建为0000_n.bz2,它们仍在磁盘上。

我有两个问题:

1) 这些文件会随着每次插入而继续增长吗? 2) 是否有任何 DROP 等效于删除磁盘上的文件?

【问题讨论】:

【参考方案1】:

你可以做的几件事:

检查表是否为外部表,在这种情况下,您需要在 HDFS 上手动删除文件,因为删除表不会删除文件: hadoop fs -rm /HDFS_location/文件名

其次检查您是否在正确的数据库中。您需要在删除表之前发出 use database 命令。数据库应与创建表的数据库相同。

【讨论】:

【参考方案2】:

hive 中有两种类型的表。 Hive 托管表:如果您删除 Hive 托管表,HDFS 中的数据将被自动删除。

外部表:如果你删除一个外部表,hive 不会删除底层数据。

我相信你的是一个外部表。

【讨论】:

【参考方案3】:

删除表如果存在 table_name purge;

此命令还会从垃圾文件夹中删除数据文件,并且在删除表后无法恢复

【讨论】:

以上是关于Hive: DROP TABLE IF EXISTS <Table Name> 不释放内存的主要内容,如果未能解决你的问题,请参考以下文章

Hive - Create Table&Drop Table & ALTER Table(上)

在 Hive CLI 上执行“alter table table_name drop partition(part_column < value)”时出现空指针错误

ALTER TABLE CREATE CONSTRAINT IF NOT EXIST 可能吗?

Hive Managed Table(内部表) 和 External Table(外部表)的区别

如何停止执行(默认):DROP TABLE IF EXISTS in sequelize sync

无法在 schema.sql 中为 Spring Boot 应用程序使用“DROP TABLE IF EXISTS”