【Apache Doris】数据副本问题排查指南
【Apache Doris】数据副本问题排查指南
- 一、问题现象
- 二、问题定位
- 三、问题处理
本文主要分享Doris中数据副本异常的问题现象、问题定位以及如何处理此类问题。
一、问题现象
- 问题日志
查询报错
Failed to initialize storage reader, tablet={tablet_id}.xxx.xxx
- 问题说明
查询时,FE让BE返回spec_version范围的数据,但是BE缺部分version了,就会报这个错误。
- 问题原因
迁移副本过程可能丢version,在2.0.3修复了,或者在数据导入过程中be宕机。
注意:
如果版本是2.0.1及以前,且它的所有副本last failed version > 0,通常需要重新建表进行导数。
二、问题定位

如上图所示,查询报错的 tablet_id 是 606202, BE ip是 10.xxx, BE 需要包含version 区间 [0 - 35]。
当确定异常tablet_id时,参考如下步骤先进行问题信息收集:

-
show tablet {tablet_id} (这里是606202),拿到detail cmd
-
执行detail cmd的输出
SHOW PROC ' /dbs/10113/591325/partitions/606195/591326/606202";
找出该BE所在的副本(compact status url中包含有该BE的ip)
- 执行curl<步骤2的compact status url>, 该例子是
curl http://10.xxx:8040/api/compaction/show?tablet_id=606202

查看该副本的rowset 和 missing_rowset,重点看rowset 的最大版本(这里是34)和 missing_rowsets。从上图可以看出该副本的rowset 为 0 ~ 34, 且中间不缺version(missing_rowsets为空)。而查询语句中是 special version 是 [0, 35], 但该BE不含version 35。所以需要给该BE补上version 35。
注意:这里的special version实际就是partition的visible version。 它也可以通过如下指令查看。
show partitions from <table-name xxx> where PartitionName = '<partition name xxx>'
三、问题处理
- 确认是否自动修复
由于doris内部会自动做数据均衡和修复,所以当出现数据副本异常时,先确认异常数据副本能否自动修复:

如果是多副本,查看是否存在健康副本。健康副本是指副本version >= special version && last failed version = -1 && isBad = false, 且curl 它的 compact status, missing rowsets 为空。
如果存在这样的副本,把查询报错的副本set bad,如上图所示BackendId为10003上版本远落后于其他两个副本的version,可以通过设置为bad来自动修复。
ADMIN SET REPLICA STATUS PROPERTIES("tablet_id" = "7552021", "backend_id" = "10003", "status" = "bad");
等待一会(可能需要一两分钟),再执行步骤2中的detail cmd,如果副本都健康了:
version >= special version && last failed version = -1 && isBad = false
且curl它的compact status, missing rowsets为空,说明修补OK了。且执行select count (*) from table_xx 是否OK。
如果没问题,就自动修复完成了,不用往下看。如果还是有问题,接着往下看。
- 重新导数手动修复
- 如果是多个副本都损坏,并且是分区表的情况下,可以删除这个分区,然后手动重建这个分区,重新导入数据即可。
- 如果是多个副本都损坏,并且是非分区表的情况下,只能删除这个表重新导入数据。
- 填充空副本进行修复
注意:
以上两个方法可以恢复丢失的数据,而填充空副本方法,是插入若干个空rowset,它能恢复读写。但如果丢失的rowset是包含数据的,这种方法实质是丢数据的。
空副本修复方式如下:
curl -X POST "http://10.151.2.29:8040/api/pad_rowset?tablet_id=606202&start_version=35&end_version=35"
- tablet_id table 的 id
- start_version 起始版本
- end_version 终止版本
该功能用于使用一个空的 rowset 填充损坏的副本。这个例子中修补的url中 start_version = 35, end_version = 35。
这个例子只是缺一个rowset, 实际中可能缺多个(missing rowset,最大version + 1 ~ special version),缺多少个rowset,就调用多少次修补的方法。
修补完之后,再执行下show tablet xxx,该副本last fail version 是否等于 -1,如果它的version都补上了,但是last fail version = version + 1, 还需要手工执行把last fail version 改成 -1:
ADMIN SET REPLICA VERSION PROPERTIES("tablet_id" = "10003", "backend_id" = "10001", "last_failed_version" = "-1");
低版本的doris可能不含这个SQL, 如果不支持这个SQL且是单副本的,通常需要重新建表进行导数。
如果没问题,使用
select count(*) from table_xx;
查看是否可读,可读则说明数据副本问题已处理。
相关文章:
【Apache Doris】数据副本问题排查指南
【Apache Doris】数据副本问题排查指南 一、问题现象二、问题定位三、问题处理 本文主要分享Doris中数据副本异常的问题现象、问题定位以及如何处理此类问题。 一、问题现象 问题日志 查询报错 Failed to initialize storage reader, tablet{tablet_id}.xxx.xxx问题说明 查…...
【HarmonyOS】关于鸿蒙消息推送的心得体会(二)
【HarmonyOS】关于鸿蒙消息推送的心得体会(二) 前言 推送功能的开发与传统功能开发还是有很大区别。首先最大的区别点就在于需要多部门之间的协同,作为鸿蒙客户端开发,你需要和产品,运营,以及后台开发一起…...
零基础入门:创建一个简单的Python爬虫管理系统
摘要: 本文将手把手教你,从零开始构建一个简易的Python爬虫管理系统,无需编程基础,轻松掌握数据抓取技巧。通过实战演练,你将学会设置项目、编写基本爬虫代码、管理爬取任务与数据,为个人研究或企业需求奠…...
【Node.js基础04】node.js模块化
一:什么是模块化 在Node.js中,每个文件都可视为一个独立的模块。模块化提高了代码的复用性,按需加载,具有独立的作用域 二:如何实现多个文件间导入和导出 1 CommonJS标准(默认)-导入和导出 …...
数据库——单表查询
一、建立数据库mydb8_worker mysql> use mydb8_worker; 二、建立表 1.创建表 mysql> create table t_worker(department_id int(11) not null comment 部门号,-> worder_id int(11) primary key not null comment 职工号,-> worker_date date not null comment…...
dsa加训
refs: OI Wiki - OI Wiki (oi-wiki.org) 1. 枚举 POJ 2811 熄灯问题 refs : OpenJudge - 2811:熄灯问题 如果要枚举每个灯开或者不开的情况,总计2^30种情况,显然T。 不过我们可以发现:若第i行的某个灯亮了,那么有且仅有第i行和第…...
SpringBoot源码(1)ApplicationContext和BeanFactory
1、调用getBean方法 SpringBootApplication public class SpringBootDemoApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext SpringApplication.run(SpringBootDemoApplication.class, args);applicationContext.get…...
CANoe编程实例--TCP/IP通信
1、简介 本实例将使用目前常用的开发工具C#来开发服务器端,以CANoe端作为客户端。服务器端和客户端,通过TCP/IP连接,实现数据交换。 首先在服务器端建立一个监听Socket,自动创建一个监听线程,随时监听是否有客户端的连…...
Neuron协议网关的北向应用插件开发
目录 概述 指令处理层开发 应用层开发 .open .close .init .uninit .start .stop .setting .request 插件设置文件 适配华为的思路 概述 最近研究了一段时间的Neuron协议网关,前面的博文也提到它虽然能够把数据发到华为的IoT平台上…...
【BUG】已解决:You are using pip version 10.0.1, however version 21.3.1 is available.
You are using pip version 10.0.1, however version 21.3.1 is available. 目录 You are using pip version 10.0.1, however version 21.3.1 is available. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…...
electron-builder打包vue2项目不显示element-ui图标
1、使用版本 vue ^2.6.14element-ui ^2.15.14vue-cli-plugin-electron-builder 2.1.1 2、解决办法 1) 如果是简单的图标可以使用图片代替(这种对于elementui组件的图标还是不会显示) 2)在vue.config.js配置 const { defineCon…...
controller层-请求格式为json-请求方法为get
前置条件 get请求映射,内容和PostMapping一致,需要请求参数更换为get数据 请求过程:用户请求--初始化DispatcherServlet及对接和分发用户请求--controller--service 用户请求:http://ip:port/user/getinfo 请求方法:ge…...
【Linux】网络通信基础:应用层协议、HTTP、序列化与会话管理
文章目录 前言1. 应用层自定义协议与序列化1.1 什么是应用层?1.2 再谈 "协议"1.3 序列化 和 反序列化 2. HTTP 协议3. 认识 URL(统一资源定位符)4. urlencode和urldecode5. HTTP 协议请求与响应格式5.1 HTTP 请求5.2 HTTP 响应 6. HTTP 的方法6.1 GET 方法…...
@NotNull、@NotEmpty 和 @NotBlank 区别
NotNull、NotEmpty 和 NotBlank 是 Java Bean Validation (JSR 380) 规范中定义的注解,通常用于验证对象的属性是否满足特定的条件。这些注解常用于后端验证,确保接收到的数据符合预期。 NotNull 用途:验证一个对象是否不为null。 注意&#…...
大模型应用—大模型赋能网络爬虫
大模型赋能网络爬虫 简单来说,网页抓取就是从网站抓取数据和内容,然后将这些数据保存为XML、Excel或SQL格式。除了用于生成潜在客户、监控竞争对手和市场研究外,网页抓取工具还可以用于自动化你的数据收集过程。 借助AI网页抓取工具,可以解决手动或纯基于代码的抓取工具的…...
在 Qt 中获取 MouseMove 事件
在编写 Qt 程序时,我希望在鼠标移动时(即使鼠标在另一个窗口上)能够调用 mouseMoveEvent(QMouseEvent* event) 方法。目前,在我的 mainwindow.cpp 文件中,我有如下代码: void MainWindow::mouseMoveEvent(…...
自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍
自动驾驶系列—智能巡航辅助功能中的车道中央保持功能介绍 自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍 自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍 文章目录 2. 功能定义3. 功能原理4. 传感器架构5. 实…...
如何为WordPress网站设置多语言站点
随着全球化的发展,拥有一个支持多语言的站点已成为提升用户体验、扩大受众范围的重要手段。本文将详细介绍如何为WordPress网站设置多语言站点,提供两种最佳方案详解,帮助您轻松实现多语言站点的搭建与管理。无论您是选择在同一站点内发布多语…...
【RHCE】综合真机实验(shell完成)
目录 题目: 需求描述 实操 一、服务端(servera) 1.ip配置 2.更改主机名 3.创建本地仓库 4.DNS服务 1.下载软件包和防火墙允许 2.配置主配置文件 3.配置区域文件 1.named.exam 2.named.fangxiang 4.重启服务 5.验证结果&#x…...
【Python】成功解决conda创建虚拟环境时出现的CondaHTTPError: HTTP 000 CONNECTION FAILED错误
【Python】成功解决conda创建虚拟环境时出现的CondaHTTPError: HTTP 000 CONNECTION FAILED错误 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地&a…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
