datax同步数据到ClickHouse时同步时间特别长,原因:Too many partitions for single INSERT block (more than 100).

这篇具有很好参考价值的文章主要介绍了datax同步数据到ClickHouse时同步时间特别长,原因:Too many partitions for single INSERT block (more than 100).。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景描述

今天将 Hive 分区中数据同步到 ClickHouse 时,发现有的任务运行时间很短,但是有的任务运行时间特别长,看了一下数据量,发现有的接近千万条数据,但是几分钟就同步完了,但是有的才几万条数据,要同步半个多小时,还有的任务几百万条数据,甚至要同步四五个小时。开始以为是配置文件中 channel(作业并发数), batchSize(批量插入条数),speed(作业速率) 这些条件限制了任务运行的时间,但是尝试将这些条件限制成一样的,再次运行任务,发现之前慢的任务还是慢,快的任务还是很快就完成了。

问题原因

发现不是配置的原因,就跑去看 datax 同步时产生的 log 日志,发现如下问题:

CommonRdbmsWriter$Task - 回滚此次写入, 采用每次写入一行方式提交. 因为:ClickHouse exception, code: 1002, host: 10.129.170.80, port: 8123; Code: 252. DB::Exception: Too many partitions for single INSERT block (more than 100). The limit is controlled by 'max_partitions_per_insert_block' setting. Large number of partitions is a common misconception. It will lead to severe negative performance impact, including slow server startup, slow INSERT queries and slow SELECT queries. Recommended total number of partitions for a table is under 1000…10000. Please note, that partitioning is not intended to speed up SELECT queries (ORDER BY key is sufficient to make range queries fast). Partitions are intended for data manipulation (DROP PARTITION, etc). (TOO_MANY_PARTS) (version 22.3.2.1)

根据上面日志可以看出,原因是单次插入的数据分区太多了,超过默认配置的 100 个了,因为 ClickHouse 为了防止可能出现极限情况,批量插入时,在逻辑中判断涉及到的分区是否超过 max_partitions_per_insert_block,如果超过,则立即执行一次插入。如果频繁插入的话,那么肯定是比较耗时的。还有如果每次插入涉及的分区太多,在插入的时候也比较耗时,原因是每个数据目录都需要和 zookeeper 进行交互。

ClickHouse 每次写入都会生成一个 data part,如果每次写入一条或者少量的数据,那会造成 ClickHouse 内部有大量的 data part(会给 merge 和查询造成很大的负担)。为了防止出现大量的 data part,ClickHouse 内部做了很多限制。max_partitions_per_insert_block 参数用来限制单个插入的 Block 中包含的最大分区数量,数据插入太频繁,ClickHouse 不支持频繁插入操作。(是因为 MergeTree 的 merge 的速度跟不上 data part 生成的速度)。

解释: max_partitions_per_insert_block (官方文档)参数用来限制单个插入 Block 中,包含的最大分区数量,默认值为 100。设置为 0 时,表示不限制。

解决办法

调整分区数或者 max_partitions_per_insert_block 参数。

  1. 合理设置分区字段
    调整表结构,调整分区方式。

  2. 避免同一批次写入包含太多分区的数据
    减小写入的批量大小,避免单个插入的不同分区数超过限制。

  3. 修改 max_partitions_per_insert_block 参数,调大这个值
    如果无法调整批量大小,可适当修改 max_partitions_per_insert_block 参数,放大限制。

    • 配置文件修改: 在 users.xml 配置文件中进行配置。配置在 <profiles> 块中。CK 的配置文件是即时生效,不需要重启服务器。
    • 在一个会话中临时修改:SET max_partitions_per_insert_block = 1000。用于临时导入大量数据的情况。

参考文章:
https://www.cnblogs.com/MrYang-11-GetKnow/p/15900553.html
https://www.jianshu.com/p/8aa2a20ab00a文章来源地址https://www.toymoban.com/news/detail-401251.html

到了这里,关于datax同步数据到ClickHouse时同步时间特别长,原因:Too many partitions for single INSERT block (more than 100).的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)

    1.1 DataX概述 源码地址:https://github.com/alibaba/DataX 1.2 DataX支持的数据源 DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入,目前支持数据如下图。 2.1 DataX设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星

    2024年02月11日
    浏览(58)
  • flink任务启动抛出mysql数据库连接过多异常message from server:“Too many connections“解决办法

    1. 异常现象 2. 现象分析 2.1 mysql数据库最大默认连接数是151 2.2 已用连接数超过了最大连接数导致的异常 3. 解决办法 3.1 修改mysql最大连接数配置文件 命令行修改最大连接数(max_connections),设置最大连接数为1000。 mysql set global max_connections = 1000; 这种方式有个问题,就是设置的最

    2024年02月14日
    浏览(54)
  • 【大数据进阶第三阶段之Datax学习笔记】使用阿里云开源离线同步工具DataX 实现数据同步

    【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax概述  【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax快速入门   【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax类图 【大数据进阶第三阶段之Datax学习笔记】使

    2024年01月24日
    浏览(58)
  • Data source rejected establishment of connection message from server:“Too many connections“; 数据库报错解决

    报错时的情况: 报错时我使用了微服务项目中使用Dubbo来进行管理, 然后同时启动了几个项目来进行数据库操作就会发生报错, 但是执行单个项目模块时是可以进行数据库操作的 ,具体报错信息忘记截图了, 可以看下面这个链接中的报错信息描述MYSQL Too many connections错误的解决办

    2024年02月06日
    浏览(47)
  • Mysql “Too many connections“ 异常

    当Mysql 数据库抛出如下异常 Caused by: com.mysql.cj.exceptions.CJException: Data source rejected establishment of connection,  message from server: \\\"Too many connections\\\"     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:

    2024年02月12日
    浏览(61)
  • 【MySQL系列】Too many connections

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年01月21日
    浏览(49)
  • 数据同步工具—DataX—Web部署使用

    以前了解datax,感觉对易用性不大好,目前发现已经图形配置工具。简单整理一下。 Datax 的使用过程中,我们会发现,不管是利用 java 调用以及 python 命令启动的方式,我们都无法进行任务的管理,并且每次执行任务前,我们 都需要编辑 Json 配置文件,这是比较繁琐的,随着业

    2024年02月05日
    浏览(44)
  • MySQL出现too many connections错误

    1、现象 navicat连接MySQL时报 too many connections 错误 2、原因 my.ini 中设定的并发连接数太少或者系统繁忙导致连接数被占满。 连接数超过了 MySQL 设置的值,与 max_connections 和 wait_timeout 都有关。 wait_timeout 的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大。 3、解

    2024年02月11日
    浏览(44)
  • DataX同步达梦数据到HDFS

    DataX同步达梦数据到HDFS 1、 前提条件 安装达梦数据库客户端 安装Python3.5 以上 导入dmPython模块 导入dmPython流程 在达梦数据库客户端 driverspythondmPython 这个路径下执行 ● 如果报错在PATH中加入 E:dmdbmsbin 达梦数据库的安装路径,并重新装载dmPython Traceback (most recent call last): ●

    2024年02月03日
    浏览(36)
  • elasticsearch Too many dynamic script 问题

    报错: Caused by: ElasticsearchException [Elasticsearch exception [type=circuit_breaking_exception, reason=[script]  Too many dynamic script compilations within, max: [75/5m];  please use indexed, or scripts with parameters instead;  this limit can be changed by the [script.max_compilations_rate] setting]]   解决方案:更

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包