Clickhouse MergeTree异常数据处理

2024-03-20 15:52

本文主要是介绍Clickhouse MergeTree异常数据处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:俊达

说明

clickhouse mergetree的数据文件如果遇到数据损坏,可能会导致clickhouse无法启动。

本文章说明如何处理这类问题。

测试

我们先人为模拟破坏mergetree数据文件:

detach table:

ck01 :) detach table metrics;DETACH TABLE metricsQuery id: bb7f334b-5203-4040-8282-eb45b01b1b72Ok.0 rows in set. Elapsed: 0.001 sec.

清空data.mrk文件

root@ck01:/data/clickhouse/clickhouse/data/local/metrics/20221129_12_12_0# ls -l
total 36
-r--r----- 1 root root 251 Dec  6 05:37 checksums.txt
-r--r----- 1 root root 129 Dec  6 05:37 columns.txt
-r--r----- 1 root root   1 Dec  6 05:37 count.txt
-r--r----- 1 root root 164 Dec  6 05:37 data.bin
-r--r----- 1 root root 176 Dec  6 05:37 data.mrk3
-r--r----- 1 root root  10 Dec  6 05:37 default_compression_codec.txt
-r--r----- 1 root root   8 Dec  6 05:37 minmax_tt.idx
-r--r----- 1 root root   4 Dec  6 05:37 partition.dat
-r--r----- 1 root root  24 Dec  6 05:37 primary.idxroot@ck01:/data/clickhouse/clickhouse/data/local/metrics/20221129_12_12_0# echo > data.mrk3

配置参数

max_suspicious_broken_parts默认为10,表示可以容忍10个part数据异常。这里我们将max_suspicious_broken_parts设置为0。

root@ck01:/data/log/clickhouse-server# cd /data/etc/clickhouse-server/config.d/root@ck01:/data/etc/clickhouse-server/config.d# cat max_suspicious_broken_parts.xml
<?xml version="1.0"?>
<yandex><merge_tree><max_suspicious_broken_parts>0</max_suspicious_broken_parts></merge_tree>
</yandex>

启动实例

2022.12.06 06:50:39.749105 [ 64066 ] {} <Error> Application: DB::Exception: Suspiciously many (1 parts, 592.00 B in total) broken parts to remove while maximum allowed broken parts count is 0. You can change the maximum value with merge tree setting 'max_suspicious_broken_parts' in <merge_tree> configuration section or in table settings in .sql file (don't forget to return setting back to default value): Cannot attach table `local`.`metrics` from metadata file /data/clickhouse/clickhouse/store/8a5/8a567911-82c1-402d-8e61-76dd938e89ef/metrics.sql from query ATTACH TABLE local.metrics UUID 'def88518-fd7b-418d-a7dd-6564e38bba39' (`tt` DateTime, `tags` Map(String, String), `metric` String, `value` Float64, `str_value` String) ENGINE = MergeTree PARTITION BY toYYYYMMDD(tt) ORDER BY (metric, tt) SETTINGS index_granularity = 8192, max_suspicious_broken_parts = 0
2022.12.06 06:50:39.749145 [ 64066 ] {} <Information> Application: shutting down
2022.12.06 06:50:39.749151 [ 64066 ] {} <Debug> Application: Uninitializing subsystem: Logging Subsystem
2022.12.06 06:50:39.749253 [ 64067 ] {} <Information> BaseDaemon: Stop SignalListener thread

这时候,我们发现,实例已经无法正常启动了。

解决方法

方法1:

如果可以接受数据丢失,可以将参数max_suspicious_broken_parts设置得大一些

<?xml version="1.0"?>
<yandex><merge_tree><max_suspicious_broken_parts>1000</max_suspicious_broken_parts></merge_tree>
</yandex>

方法2:

使用force_restore_data标记文件

touch /data/clickhouse/clickhouse/flags/force_restore_data
clickhouse-server --config-file /data/etc/clickhouse-server/config.xml --daemon

启动后,可以从detached_parts表中查看detach的part信息:

ck01 :) select * from detached_parts where table='metrics';SELECT *
FROM detached_parts
WHERE table = 'metrics'Query id: c6f61369-259d-4c07-b730-7572c3095bad┌─database─┬─table───┬─partition_id─┬─name─────────────────────────────┬─disk────┬─reason──────────┬─min_block_number─┬─max_block_number─┬─level─┐
│ local    │ metrics │ 20221129     │ broken-on-start_20221129_12_12_0 │ default │ broken-on-start │               12120 │
└──────────┴─────────┴──────────────┴──────────────────────────────────┴─────────┴─────────────────┴──────────────────┴──────────────────┴───────┘1 row in set. Elapsed: 0.002 sec.

异常数据被移到了detached目录

ls detached/
broken-on-start_20221129_12_12_0

如果不允许丢失数据,需要从备份中恢复数据。

可以使用alter table attach part命令从备份中将part恢复出来。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

这篇关于Clickhouse MergeTree异常数据处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829965

相关文章

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

MybatisPlus3.3.1整合clickhouse的过程

《MybatisPlus3.3.1整合clickhouse的过程》:本文主要介绍MybatisPlus3.3.1整合clickhouse的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定... 前言ClickHouse是俄罗斯Yandex发布的一款数据分析型数据库支持sql语法,详情可以访问官网,

redis在spring boot中异常退出的问题解决方案

《redis在springboot中异常退出的问题解决方案》:本文主要介绍redis在springboot中异常退出的问题解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴... 目录问题:解决 问题根源️ 解决方案1. 异步处理 + 提前ACK(关键步骤)2. 调整Redis消费者组

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决