clickhouse(十二、踩坑之路)

本文汇总了ClickHouse数据库在运行过程中遇到的多种常见错误及其详细的解决方案,包括元数据与数据不一致、分布式DDL语句超时、字符串转数字异常等问题,提供了实用的修复策略和技术建议。
  • Q1
    DB::Exception: Cannot create table from metadata file /data/clickhouse/metadata/default/dwd_test.sql, error: DB::Exception: The local set of parts of table default.dwd_test doesn’t look like the set of parts in ZooKeeper: 65.88 million rows of 85.04 million total rows in filesystem are suspicious. There are 545 unexpected parts with 65883643 rows (191 of them is not just-written with 65883643 rows), 0 missing parts (with 0 blocks).

  • A1
    这是由于truncate、alter等ddl语句用了on cluster,偶尔导致zookeeper同步异常。解决方法1:删除有问题节点的本地表数据 rm -r /data/clickhouse/data/default/dwd_test,再重新启动CK,副本会自动重新同步该表数据。(如果没有副本请不要使用此方法。)
    解决方法2:命令行执行sudo -u clickhouse touch /data/clickhouse/flags/force_restore_data 然后手动恢复有问题的partition

  • Q2
    Connected to ClickHouse server version 20.3.8 revision 54433.
    Poco::Exception. Code: 1000, e.code() = 13, e.displayText() = Access to file denied: /home/qspace/.clickhouse-client-history (version 20.3.8.53 (official build))

  • A2

    创建该文件、并设置开放权限。
    chown clickhouse:clickhouse /home/qspace/.clickhouse-client-history (没有则创建)

  • Q3
    Application: DB::Exception: Listen [::]:8124 failed: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = DNS error: EAI: Address family for hostname not supported (version 20.5.2.7 (official build))

  • A3
    本机没有开放ipv6,只能对ipv4生效。在/etc/click-house/config.xml中,把<listen_host> 改成0.0.0.0 或者 ::

  • Q4
    Code: 32, e.displayText() = DB::Exception: Received from hadoop8:9900. DB::Exception: Attempt to read after eof: Cannot parse Int32 from String, because value is too short. (version 20.3.8.53 (official build))
    字符串转数字异常,有些为空或者非数字的字符导致转换失败

  • A4
    使用toUInt64OrZero函数、转换失败则为0。

  • Q5
    Application: DB::Exception: Suspiciously many (125) broken parts to remove.: Cannot attach table default.test
    Code: 231. DB::Exception: Received from ck10:9000. DB::Exception: Suspiciously many (125) broken parts to remove…

  • A5
    因为写入数据造成的元数据和数据不一致问题。先删除磁盘数据、再重启节点删除本地表,如果是复制表再上zookeeper删除副本,然后重新建表。复制表的话数据会同步其他副本的。

  • Q6
    Cannot execute replicated DDL query on leader.

  • A6
    由于分布式ddl语句比较耗时会超时响应、改为本地执行或者减少作用的数据范围。如ALTER、OPTIMIZE全表改为具体的partition.

  • Q7
    Code: 76. DB::Exception: Received from 0.0.0.0:9900. DB::Exception: Cannot open file /data/clickhouse/data/default/test/tmp_insert_20200523_55575_55575_0/f0560_deep_conversion_optimization_goal.mrk2, errno: 24, strerror: Too many open files.

  • A7
    修改/etc/security/limits.conf 添加:
    clickhouse soft nofile 262144
    clickhouse hard nofile 262144
    使用ulimit -n 查询、看到的是所有用户可打开的总数,而ck能打开的大小只是系统的默认值,所以不要被这个命令干扰,重启ck后、获取ck的进程、再通过cat /proc/${pid}/limits |grep open ,判断配置是否生效

  • Q8
    DB::Exception: Too many parts(100).

  • A8
    官方回答:The following changes have been made on config.xml:

<merge_tree>
    <parts_to_delay_insert>300</parts_to_delay_insert>
    <parts_to_throw_insert>600</parts_to_throw_insert>
    <max_delay_to_insert>2</max_delay_to_insert>
    <max_suspicious_broken_parts>5</max_suspicious_broken_parts>
</merge_tree>
  • Q9
    Code: 117. DB::Exception: Received from hadoop8:9900. DB::Exception: Data directory for table already containing data parts - probably it was unclean DROP table or manual intervention. You must either clear directory by hand or use ATTACH TABLE instead of CREATE TABLE if you need to use that parts…

  • A9
    建表的时候发现之前表存储数据还在,如果需要之前的数据那么把create改为attach语句,如果需要则要清理磁盘上对应表空间的目录、如果zookeeper上也有相关信息可能也需要一起清理。

  • Q10
    Received exception from server (version 20.3.8):
    Code: 999. DB::Exception: Received from hadoop7:9900. DB::Exception: Session expired (Session expired).

  • A10
    查看日志应该是zookeeper的状态问题。

<think>嗯,用户想了解Paimon和ClickHouse的集成文档或使用指南。这是一个关于大数据技术栈整合的问题,用户可能是数据工程师或架构师,正在评估两种技术的协同方案。 从技术背景来看,Paimon是Apache的新兴数据湖存储格式,而ClickHouse是成熟的列式分析数据库。用户特意提到“integration”,说明关注点在于两者如何打通数据流,而非单独使用。 我注意到几个关键点需要覆盖: 1)官方文档现状:目前没有直接集成文档,但社区有相关讨论 2)技术可行性:通过外部表或数据管道实现 3)具体操作路径:包括JDBC和Spark两种主流方式 4)适用场景:明确什么情况下适合这种组合方案 用户可能还隐含了性能对比需求,比如和直接使用ClickHouse相比有何优劣。需要特别注意说明数据新鲜度要求不同时的方案差异——这是实际工程中容易的点。 关于引用处理,社区讨论的GitHub issue是重要参考源,但要注意标注“非官方”性质。技术博客的案例虽然有用,但需提醒用户验证版本兼容性。 最后生成的问题要引导用户思考架构细节: - 数据规模决定了JDBC是否适用 - 实时性要求影响管道设计 - 现有基础设施(如Spark环境)关系到方案选择 用户没有提及具体业务场景,所以补充问题需要帮助ta聚焦需求,比如明确是替换现有方案还是新建系统。毕竟Lambda架构和Kappa架构对集成的要求差异很大。</think>以下是Paimon与ClickHouse集成的技术方案及实践指南: --- ### 一、核心集成方案 1. **外部表查询** ClickHouse通过`JDBC`或`MySQL`表引擎直接查询Paimon表: ```sql CREATE TABLE ch_paimon ( id UInt32, dt Date ) ENGINE = MySQL('paimon-host:3306', 'db', 'table', 'user', 'password'); ``` *需在Paimon中启用JDBC Catalog[^1]* 2. **Spark数据管道** 用Spark同步数据(推荐生产环境): ```scala // 读取Paimon val paimonDF = spark.read.format("paimon").load("path/to/paimon_table") // 写入ClickHouse paimonDF.write .format("jdbc") .option("url", "jdbc:clickhouse://ch-host:8123") .option("dbtable", "target_table") .save() ``` --- ### 二、实时同步架构 ```mermaid graph LR A[Flink/Kafka] --> B(Paimon Lakehouse) B --> C{同步方式} C --> D[Spark Batch] C --> E[Flink CDC] D --> F[(ClickHouse)] E --> F ``` --- ### 三、关键配置项 1. **Paimon侧** - 启用`jdbc-catalog`(配置`catalog.type=jdbc`) - 设置`warehouse`路径为HDFS/S3路径 2. **ClickHouse侧** - 调整`max_partitions_per_insert_block`(建议≥100) - 开启`parallel_view_processing` --- ### 四、性能优化建议 1. **分区对齐** Paimon分区键(如`dt`)应与ClickHouse的`PARTITION BY`一致 2. **批处理压缩** 写入时启用`clickhouse-jdbc`的`compress`参数: ```scala .option("compress", "true") // 减少网络传输 ``` 3. **数据分片** 按ClickHouse的`sharding_key`预分区数据 --- ### 五、适用场景 | 场景 | 推荐方案 | 延迟 | |---------------------|------------------|--------| | 历史数据分析 | Spark批量同步 | 小时级 | | 实时监控仪表盘 | Flink CDC | <1分钟 | | 混合负载查询 | 外部表直连 | 秒级 | --- ### 六、注意事项 1. 数据类型映射需手动校验(如Paimon的`TIMESTAMP_LTZ` → ClickHouse的`DateTime64`) 2. 大规模写入时禁用ClickHouse的`index_granularity`自适应 3. 推荐使用**Paimon 0.5+** 与 **ClickHouse 23.3+**(优化JDBC性能) [^1]: 详见 [Paimon JDBC Catalog文档](https://paimon.apache.org/docs/master/catalogs/#jdbc-catalog) [^2]: ClickHouse社区案例 [GitHub Issue#18924](https://github.com/ClickHouse/ClickHouse/issues/18924) ---
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值