之前一个spark写ck的任务,某天开始频繁报错如下:
Too many parts (300). Merges are processing significantly slower than inserts (version 21.6.5.37 (official build))。
之前在网上查了查该问题,了解到:当数据插入到clickhouse时,会生成parts文件,clickhouse后台会有合并小文件的操作。当插入速度过快,生成parts小文件过快时,clickhouse无法以适当的速度合并这些parts时会报上面这个错误。
解决方法有两种方式:
一、降低insert clickhouse速度
我选择spark savetock 的并行度,在数据插入ck之前,进行repartition操作。我spark任务总共时4cores,我repartition=4设置数据插入ck的并行度为4。降低并行度后,任务重新跑了一次,没有出现上面那个报错。(但是在之后几天还是会出现这个报错,应该是我设置的并行度还是较高,但是我不想再降低并行度了,于是采用方法二继续解决这个问题)
二、修改clickhouse config.xml 中有关merge_tree配置
拉大插入间隔,每次插入的数据量大一些,merge_tree添加如下配置:
600 600 2 5
我这ck集群有三台,分别添加上面配置后,我重启了clickhouse集群:
systemctl restart clickhouse-server.service
目前再跑任务没有出现上面的报错了。
参考博客文章:
1.解决clickhouse报在后台将较小的parts合并为较大parts异常的问题_云深海阔专栏-CSDN博客
2.clickhouse的too many part问题_kangseung的博客-CSDN博客
3.【ClickHouse系列】写入频繁时为什么易产生Too many part问题_一只努力的微服务-CSDN博客_clickhouse频繁写入



