首页>>互联网>>大数据->上一篇的后续 hive discover.partitions & external.table.purge

上一篇的后续 hive discover.partitions & external.table.purge

时间:2023-11-29 本站 点击:0

背景

修改后,现在metastore 重启后5、6分钟就开始卡 。然后我们任务就跑不动了 。

原因分析

自动管理分区

您可以发现分区更改并自动同步Hive元数据。与手动执行相反,自动执行同步可以节省大量时间,尤其是在分区数据(例如日志)频繁更改时。您还可以配置将分区数据和元数据保留多长时间。

创建分区表后,Hive不会更新有关您添加或删除的文件系统上相应对象或目录的元数据。添加或删除相应的对象/目录后,Hive元存储中的分区元数据变得陈旧。您需要同步元存储和文件系统。

您可以手动或自动刷新Hive Metastore分区信息。

• 手动

您运行MSCK(元存储一致性检查)Hive命令: MSCK REPAIR TABLE table_name SYNC PARTITIONS每次需要将分区与文件系统同步时。

• 自动

您将分区发现设置为定期发生。

discover.partitions表属性是自动创建的,并已为外部分区表启用。当discover.partitions 对一个表被启用,蜂巢如下执行自动刷新:

• 将文件系统中但不在metastore中的相应分区添加到metastore。

• 如果您从文件系统中删除了相应的分区,则从元存储中删除分区架构信息。

您可以配置保留分区元数据和数据多长时间,并在保留期限过后将其删除。

局限性

通常,不建议在托管表上使用分区发现和保留。Hive元存储在表上获取排他锁,从而启用分区发现,这会减慢其他查询的速度。

自动进行分区发现和修复

Hive可以自动并定期发现Hive元存储中分区元数据中以及文件系统上相应目录或对象中的差异。发现差异后,Hive执行同步。自动分区发现对于处理Spark和Hive目录中的日志数据以及其他数据很有用。

该discover.partitions表属性启用或禁用并与分区的文件系统同步。在外部分区表中,创建表时默认情况下启用此属性(true)。对于旧版外部表(使用不支持此功能的Hive版本创建),您需要添加discover.partitions到表属性中以启用分区发现。

默认情况下,分区的发现和同步每5分钟进行一次,但是您可以按照此任务中所示配置频率。

启用压缩(请参见下面的链接)作为解决以下已知问题的解决方法:除非启用压缩,否则发现不会开始。

1.假设您使用不支持分区发现的Hive版本创建了一个外部表,请对该表启用分区发现。

ALTER TABLE exttbl SET TBLPROPERTIES ('discover.partitions' = 'true');

复制

将分区同步设置为每10分钟发生一次,以秒为单位:设置metastore.partition.management.task.frequency为600。

ALTER TABLE exttbl SET TBLPROPERTIES ('metastore.partition.management.task.frequency' = 600

discover.partitions参数设置为true了,导致我drop分区后,内容没有被删除,分区有自动发现了,造成锁表

解决

第一种关闭自动分区发现(不推荐)

ALTER TABLE exttbl SET TBLPROPERTIES ('discover.partitions' = 'false');

第二种 修改external.table.purge

external.table.purge这个参数建表的时候设成true,加了这个删分区就文件了。

ALTER TABLE exttbl SET TBLPROPERTIES ('external.table.purge' = 'true');

删除外部表数据

当您在外部表上运行 DROP TABLE 时,默认情况下 Hive 仅删除元数据(模式)。如果您希望 DROP TABLE 命令也删除外部表中的实际数据,就像 DROP TABLE 对托管表所做的那样,您需要相应地配置表属性。

创建要在 Hive 中查询的数据的 CSV 文件。

启动蜂巢。

创建一个外部表来存储 CSV 数据,配置该表以便您可以将其与数据一起删除。

CREATE EXTERNAL TABLE IF NOT EXISTS names_text(  a INT, b STRING)  ROW FORMAT DELIMITED  FIELDS TERMINATED BY ','  STORED AS TEXTFILE  LOCATION '<file system>://andrena'  TBLPROPERTIES ('external.table.purge'='true');

在外部表上运行 DROP TABLE。

DROP TABLE names_text;

该表从 Hive Metastore 中删除,数据存储在外部。例如,names_text从 Hive Metastore 中删除,并且存储数据的 CSV 文件也从文件系统中删除。

防止外部表中的数据被 DROP TABLE 语句删除。

ALTER TABLE addresses_text SET TBLPROPERTIES ('external.table.purge'='false');

参考

管理分区 删除外部表数据

原文:https://juejin.cn/post/7098572462274641927


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/BigData/1287.html