文档首页> MapReduce服务 MRS> 组件操作指南(LTS版)> 使用CarbonData> CarbonData常见问题> 开启TableStatus多版本特性下,最新tablestatus文件丢失或损坏,如何恢复
更新时间:2024-05-28 GMT+08:00

开启TableStatus多版本特性下,最新tablestatus文件丢失或损坏,如何恢复

问题

开启TableStatus多版本特性下,最新的tablestatus文件丢失或其他异常原因损坏的情况下,如何恢复?

回答

使用当前可得的最近的tablestatus文件进行恢复,分为如下两个场景来进行恢复:

场景一:当前批次的CarbonData数据文件和.segment文件损坏无法恢复。

  1. 进入客户端节点,执行如下命令,查看HDFS对应表的tablestatus文件,找到最近的tablestatus版本号。

    cd 客户端安装路径

    source bigdata_env

    source Spark/component_env

    kinit 组件业务用户 (普通集群无需执行kinit命令)

    hdfs dfs -ls /user/hive/warehouse/hrdb.db/car01/Metadata

    上图中,当前批次文件tablestatus_1669028899548损坏,需要使用tablestatus_1669028852132文件。

  2. 进入spark sql,执行如下命令来修改表属性latestversion为当前最近的版本号。

    alter table car01 set SERDEPROPERTIES ('latestversion'='1669082252132');

    需要退出当前session,重新连接后执行查询。该方式已尽可能恢复客户数据,一般现网情况下,如断电场景segment数据文件也会存在不可恢复情况。

场景二:当前批次的Carbondata数据文件和.segment文件完整,可恢复。

使用TableStatusRecovery恢复工具,当前工具仅针对非分区表进行恢复。进入Spark客户端节点,执行如下命令:

cd 客户端安装路径

source bigdata_env

source Spark/component_env

kinit 组件业务用户 (普通集群无需执行kinit命令)

spark-submit --master yarn --class org.apache.carbondata.recovery.tablestatus.TableStatusRecovery Spark/spark/carbonlib/carbondata-spark_*.jar hrdb car01

参数说明:hrdb car01表名称。

TableStatusRecovery恢复工具限制:

  • 合并后,如果tablestatus文件丢失或损坏,使用该工具无法恢复合并状态的segment,因为丢失或损坏的tablestatus文件才存在该segment合并信息。
  • Delete segment by Id/Date后,如果tablestatus文件丢失或损坏,则无法恢复已删除的segment信息,因为只有丢失或损坏的tablestatus文件才存在该segment的删除信息。
  • 不支持在mv表上使用该工具。
  • 由于最新的tablestatus文件存在问题,使用该工具恢复后无法正常查询时,可以移除最新的tablestatus文件,使用上一个tablestatus文件进行恢复。