更新时间:2026-08-25 GMT+08:00
分享

批量导入本地数据文件至ClickHouse集群

操作场景

当本地存在较多数据文件需要导入ClickHouse时,用户可以使用多线程导入工具批量导入ClickHouse。

多线程导入工具通过并行处理多个任务,显著提高数据导入的速度和效率。

  • 提高处理速度:多线程可以充分利用多核CPU的计算能力,同时处理多个数据文件,从而显著减少数据导入的总时间。
  • 资源高效利用:通过并行处理,可以更高效地利用系统资源,提高整体性能。
  • 提高导入效率:多线程导入工具可以有效地管理并发任务,确保数据导入过程更加顺畅和高效。
典型应用场景:
  • 日志文件批量导入:将服务器或应用产生的日志文件(如CSV、TSV格式)批量导入ClickHouse进行分析。
  • 历史数据迁移归档:将其他大数据系统(如HDFS、Hive)中的历史数据导出后批量导入ClickHouse。

约束与限制

  • 本章节仅适用于MRS 3.3.0-LTS及之后版本。
  • 导入过程中会对ClickHouse集群产生写入压力,建议在业务低峰期执行大规模数据导入。

前提条件

  • 已安装ClickHouse客户端,例如客户端安装目录为“/opt/client”。
  • 如果集群为安全模式需要创建一个具有ClickHouse相关权限的用户,例如创建用户“clickhouseuser”,具体请参考创建具有ClickHouse权限的用户
  • 准备待导入的数据文件,并将数据文件上传到客户端节点目录,例如上传到目录“/opt/data”。

    ClickHouse支持的所有数据类型请参考:https://clickhouse.com/docs/en/interfaces/formats

操作步骤

  1. 以客户端安装用户,登录客户端所在节点。
  2. 进入多线程写入工具“clickhouse_insert_tool”所在目录:

    cd /opt/client/ClickHouse/clickhouse_insert_tool

  3. 使用文本编辑器打开clickhouse_insert_tool.sh,按照注释填写所需信息:

    参数

    参数描述

    示例

    datapath

    待导入数据所在目录。

    /opt/data

    balancer_ip_list

    ClickHouse服务Balancer实例IP地址列表,整体使用括号括起,单个IP使用双引号引起,IP之间使用空格分隔。

    Balancer IP地址可通过登录FusionInsight Manager,选择“集群 > 服务 > ClickHouse > 实例”查看Balancer实例获取。

    ("192.168.1.1" "192.168.1.2")

    balancer_tcp_port

    ClickHouse服务Balancer实例TCP端口。

    21428

    local_table_name

    待导入的本地库名.本地表名。

    testdb1.testtb1

    thread_num

    并发导入线程数。

    10

    data_format

    待导入数据的格式。支持格式包括CSV、TSV、JSONEachRow、Parquet、ORC等。

    CSV

    is_security_cluster

    集群是否为安全模式。

    • true:表示安全模式
    • false:表示普通模式

    true

  4. 保存修改后的 “clickhouse_insert_tool.sh”,并执行如下命:

    进入客户端目录:

    cd /opt/client

    配置环境变量:

    source bigdata_env

    安全模式(开启Kerberos认证)执行kinit命令,普通模式(关闭Kerberos认证)无需执行:

    kinit clickhouseuser

  5. 运行脚本,导入数据。

    ./ClickHouse/clickhouse_insert_tool/clickhouse_insert_tool.sh

  6. 登录ClickHouse客户端节点,连接服务端,具体请参考ClickHouse客户端使用实践
  7. 执行如下命令,查询插入数据的本地表对应的分布式表,查看结果是否符合预期:

    select count(1) from testdb1.testtb1_all;

相关文档

  • 常见问题:
    • 导入失败提示Connection refused:请检查balancer_ip_list和balancer_tcp_port配置是否正确,确认Balancer实例状态正常,可通过FusionInsight Manager查看Balancer实例状态。
    • 导入失败提示Authentication failed:安全模式下请确认已执行kinit命令完成Kerberos认证,且认证用户具有目标表的写入权限。
    • 数据格式不匹配导致导入失败:请确认data_format参数与实际数据文件格式一致,数据文件的列顺序和数据类型与目标本地表结构匹配。
    • 线程数设置过大导致内存溢出:请降低thread_num参数值,建议设置为客户端节点CPU核数的1~2倍,同时确认客户端节点可用内存充足。
    • 导入完成后数据量不匹配:请查看导入日志中成功和失败的行数,检查失败行数对应的数据文件是否有格式异常或数据缺失。通过查询分布式表count与源文件行数对比确认数据完整性。

相关文档