记一次carbondata自动删除元数据恢复方法

1,背景
程序正常入库,由于入库使用的队列资源太小,需要重新调整,先停止了之前load队列的任务,重新启动后,发现carbondata表中什么都没有了,segments全部都是空的
在这里插入图片描述

2,由于是现网环境,非常着急,第一时间停止了etl入库进程,并查看了回收站,回收站没有发现文件
3,排查 /user/hive/warehouse/表/Fact/Part0/这个目录下数据还在,至少数据没有被删掉

在这里插入图片描述
放心了数据还在

排查 /user/hive/warehouse/tablename表名/LockFiles这里是存放已经入库的数据记录在这里插入图片描述 4,排查 /user/hive/warehouse/表/Metadata中的tablestatus,发现生成了一个tablestatus.history的,同时tablesttus中数据是空的
5,尝试通过tablestatus.history恢复,重命名为tablestatus,发现所有segments的状态都是mark for delete ,这下完了这都是被标记删除的segment
6,没办法,只能重新组装tablestatus的内容,手动在 /user/hive/warehouse/表/Fact/Part0/中根据信息和/user/hive/warehouse/gn_fw_carbon/Metadata/segments中对应segment的信息(这里是存放segment的原数据信息,包括对应的segment在哪个位置,以及对应的文件存放的位置,segments的状态)
在这里插入图片描述

组装对应的segment的大小,名称,开始时间和结束时间等信息
正常的segment的信息
{“timestamp”:“1737051059535”,“loadStatus”:“Success”,“loadName”:“609”,“dataSize”:“4030”,“indexSize”:“1083”,“loadStartTime”:“1737051053486”,“segmentFile”:“609_1737051053486.segment”}
7,验证正常了
8,附加自动生成tablestatus的代码

package com.eversee.bu;/**
 * @author buchifna
 * @date 2025/1/15 11:37
 */

import com.google.gson.Gson;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @author       : 不吃饭
 * @description  : 
 * @createDate   : 2025/1/17 11:37
 **/
public class BuildMetadataCarbondata1 {
   
    public static void main(String[] args
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值