更新时间:2025-12-10 GMT+08:00
分享

关闭Kudutable软删除特性

操作场景

本章节介绍如何关闭Kudu的soft delete特性,即通过DELETE操作删除表后立即删除数据,而不是在后台存留一段时间后再彻底删除。

Kudu默认开启soft delete特性。当通过DELETE操作删除表时,数据并不会立即从Kudu中彻底删除,这些数据会在后台存留一段时间(默认为6小时),之后才会被彻底删除。通过这一特性,可以在误操作的情况下恢复表和数据,从而提供了一定程度的数据保护。

如下图所示,test表处于Soft_deleted状态。

处于Soft_deleted状态的表,可通过如下命令找回,其中table_id为上图的蓝色字符串。
kudu table recall <kudumaster_addresses> <table_id>

如果在Impala中创建/删除Kudu表,则在软删除特性开启的状态下,通过Impala删除Kudu后无法立即重建同名的表,出现如下提示:

ERROR: ImpalaRuntimeException: Error creating Kudu table 'impala::xx.xx' CAUSED BY: ImpalaRuntimeException: Table 'impala::xx.xx' already exists in Kudu.

这表示Kudu表还处于软删除保留期内,并未完全删除。此时可以有如下选择:

  • 创建其他名称的表。
  • 在保留期之后再创建同名表(默认6小时)。
  • 参考本章节操作关闭软删除特性,快速恢复。

前提条件

本章节仅适用于MRS 3.6.0-LTS及之后版本。

关闭软删除

如果您需要立即删除表及其数据,可通过以下方式处理:

方式一:Kudu全局生效

  1. 登录FusionInsight Manager系统。

    详细操作请参考访问集群Manager

  2. 选择“集群 > 服务 > Kudu > 配置”,单击“全部配置”,搜索参数“default_deleted_table_reserve_seconds”,值修改“0”。
  3. 修改参数配置后,单击“保存”,根据界面提示操作后,等待配置保存成功。
  4. 在Kudu服务概览页面,选择“更多 > 重启服务/滚动重启服务”,验证管理员密码后,等待服务重启成功。

    组件重启期间将无法对外提供服务,可能会影响集群的上层业务正常运行,请在业务空闲期或确认操作无影响后再执行本操作。

方式二:Impala全局生效

  1. 登录FusionInsight Manager系统。

    详细操作请参考访问集群Manager

  2. 选择“集群 > 服务 > Impala > 配置”,单击“全部配置”,搜索参数“default_query_options”,在值中新增“,KUDU_TABLE_RESERVE_SECONDS=0”。
  3. 修改参数配置后,单击“保存”,根据界面提示操作后,等待配置保存成功。
  4. 在Impala实例页面,勾选所有状态为配置过期的Impalad实例,验证管理员密码后,重启实例。

    组件实例重启期间将无法对外提供服务,可能会影响集群的上层业务正常运行,请在业务空闲期或确认操作无影响后再执行本操作。

方式二:单表生效

  • 以kudu命令行为例,指定-reserve_seconds=0即可立即删除表。
    kudu table delete <kudumaster_addresses> <table_name> -reserve_seconds=0
  • 以Kudu Java SDK为例,在KuduClient.deleteTable()接口中指定删除时间为0立即删除表。
    KuduClient.deleteTable(<tableName>, <reserveSeconds>);
  • 如果需要删除从impala创建的kudu表,比如通过Impala-shell删表,则可以配置如下query option立即删除表:
    set KUDU_TABLE_RESERVE_SECONDS=0;
    drop table <impala_table_name>;

相关文档