1: 错误日志

W20260120 17:48:57.857667 2839121 status.h:415] meet error status: [E-1412]fail to load tablet because can not parse meta_binary string. tablet_id=42331, schema_hash=708837770, path=/data/module/doris, status=[E-206]parse tablet meta failed
W20260120 17:48:57.857767 2839121 data_dir.cpp:462] load tablet from header failed. status:[E-1412]fail to load tablet because can not parse meta_binary string. tablet_id=42331, schema_hash=708837770, path=/data/module/doris, status=[E-206]parse tablet meta failed
, tablet=42331.708837770
I20260120 17:48:57.872689 2840510 storage_engine.cpp:869] failed to find tablet 42331 for rowset: 02000000000001f6c24b453c26c535d9c19aa4d8f78b96aa, tablet may be dropped

这些报错说明 BE 在启动或加载元数据时,有某个 tablet 的 meta 已经损坏,导致:

  • fail to load tablet because can not parse meta_binary string:无法解析该 tablet 的 meta 信息(42331 / 708837770),属于“加载 tablet 失败”场景。[BE ignore_load]
  • 随后又出现 failed to find tablet 42331 for rowset ... tablet may be dropped,说明运行时也找不到这个 tablet,对应的数据行集(rowset)已经无法关联。

文档里没有对 meta_binary 损坏本身的直接说明,但对“tablet 加载失败”和“坏副本处理”的处理方式有比较明确的建议,可以按下面步骤排查和修复:

  1. 确认是否只有单个副本损坏

    在 FE 上执行:

    SHOW TABLET 42331\G;
    

    然后根据 DetailCmd 再执行对应的 SHOW PROC,查看该 tablet 在各个 Backend 上的副本信息、版本是否一致,确认是否只有某个 BE 上的副本异常。[Tablet local debug]

  2. 如果有其他正常副本:将坏副本下线并让系统自动修复

    在确认其他副本正常的前提下,可以在 FE 上对出问题的 BE 副本执行:

    ADMIN SET REPLICA STATUS
    PROPERTIES (
      "tablet_id" = "42331",
      "backend_id" = "<出问题的BE的BackendId>",
      "status" = "bad"
    );
    

    标记为 BAD 后,该副本将不再被访问,FE 会根据其他正常副本自动重建新的副本。操作前务必确认其他副本健康。[ADMIN SET REPLICA STATUS; Error -214 repair]

  3. 如果 BE 因为加载失败无法启动

    文档提供两种方式恢复:[BE ignore_load]

    • 使用 meta_tool 在该 BE 上删除损坏的 tablet meta:

      ./lib/meta_tool \
        --root_path=/data/module/doris \
        --operation=delete_meta \
        --tablet_id=42331 \
        --schema_hash=708837770
      

      然后重启 BE。[Tablet meta tool]

    • 或者临时在 be.conf 中设置:

      ignore_load_tablet_failure = true
      

      让 BE 忽略加载失败的 tablet,先启动起来,再通过 FE 侧的 ADMIN SET REPLICA STATUS 等方式做后续修复。

  4. 如需进一步排查该 tablet 的问题

    • 在 FE 上执行:

      SHOW TABLET DIAGNOSIS 42331;
      

      查看该 tablet 的副本数量、版本状态、状态是否异常。[SHOW TABLET DIAGNOSIS]

    • 如果需要做更深入的本地调试(例如复现 bug),可以参考“Tablet Local Debug”流程,用 ADMIN COPY TABLET 生成快照,在本地单机环境加载该 tablet 进行分析。[Tablet local debug]

如果你能补充:该 tablet 的副本数、哪些 BE 上报错、BE 当前是否能正常启动,我可以帮你更具体地给出推荐操作顺序。

从你贴出的 `SHOW TABLET

DIAGNOSIS 42331结果看,这个 tablet 只有**一个副本**,并且该副本在 BE 10118 上已经被标记为bad`:

  • Replicas(ReplicaId -> BackendId) {"42332":10118}
  • ReplicaStatus Replica on backend 10118's state is NORMAL, and is bad: Yes, and is going to drop: No [SHOW TABLET DIAGNOSIS]

结合你之前的 BE 日志:

  • fail to load tablet because can not parse meta_binary string(meta 损坏)
  • failed to find tablet 42331 for rowset ... tablet may be dropped

可以确认:该 BE 上这个副本的 meta 已经损坏且被标记为 bad,且没有其他副本可用于自动修复。

文档里对这种“坏副本”的处理方式是:

  1. 如果有其他正常副本:用 ADMIN SET REPLICA STATUS 把坏副本标记为 bad,让系统自动补副本。[ADMIN SET REPLICA STATUS; 删除坏副本实践]

  2. 如果 BE 因为加载失败起不来:可以在 BE 机器上用 meta_tool 删除损坏的 tablet meta,或者设置 ignore_load_tablet_failure=true 让 BE 忽略这些坏 tablet 启动。[ignore_load_tablet_failure; Tablet meta tool]


针对你当前这个 tablet 的可行操作(基于文档)

由于知识库里没有“单副本且 meta 损坏如何恢复数据”的官方步骤,只能给出运维层面的处理建议,数据是否能找回要看你是否有其他备份或上游数据:

  1. 保证 BE 能正常启动

    如果 BE 因为这个 tablet 加载失败而起不来,可以在该 BE 上执行(停 BE 后):

    ./lib/meta_tool \
      --root_path=/data/module/doris \
      --operation=delete_meta \
      --tablet_id=42331 \
      --schema_hash=708837770
    

    然后重启 BE。[Tablet meta tool]

    或者在 be.conf 中设置:

    ignore_load_tablet_failure = true
    

    让 BE 忽略加载失败的 tablet 先启动起来。[ignore_load_tablet_failure]

  2. 在 FE 上清理/标记坏副本

    该副本已经是 bad 状态,文档建议通过 ADMIN SET REPLICA STATUS 显式标记,触发后续修复逻辑(虽然当前只有一个副本,系统无法自动从其他副本恢复数据):[ADMIN SET REPLICA STATUS]

    ADMIN SET REPLICA STATUS
    PROPERTIES (
      "tablet_id" = "42331",
      "backend_id" = "10118",
      "status" = "bad"
    );
    

    这样可以确保该坏副本不再参与读写,避免继续报错。[删除坏副本实践]

  3. 数据恢复层面

    知识库中没有关于“单副本、meta 已损坏时如何从本机强行恢复数据”的官方说明;Tablet Local Debug 和 admin copy tablet 主要用于在有可用副本/版本时做本地调试和复现问题,而不是从损坏 meta 中恢复生产数据。[Tablet local debug]

    因此,如果这个 tablet 的数据很重要,只能依赖:

    • 是否有其他 Doris 集群/备份;
    • 是否可以从上游(如 Kafka、ODS 表等)重导这部分数据。

建议你接下来做的检查

  1. 对整张表执行:

    SHOW REPLICA STATUS FROM hatc_statistics_core_staging.bi_airspace_usage
    WHERE TabletId = 42331;
    

    确认确实只有这一个副本,且状态为非 OK。[SHOW REPLICA STATUS]

  2. 用:

    SHOW TABLET DIAGNOSIS 42331;
    

    再次确认 ReplicasNum、ReplicaBackendStatus 等是否仍为 OK,仅 ReplicaStatus 提示 bad。[SHOW TABLET DIAGNOSIS]

如果你能补充:当前 BE 是否能正常启动、这张表的 replication_num 配置是多少、是否有备份或上游可重导,我可以基于文档帮你梳理一个更具体的“删坏 tablet + 重建/重导”的操作顺序。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐