本文介绍使用DataWorks平台的数据集成工具将数据导入到ClickHouse。

背景信息

数据集成工具支持使用脚本模式向导模式两种方式配置数据导入任务。脚本模式使用XML脚本配置导入导出逻辑;向导模式使用可视化界面配置导入导出逻辑。目前云数据库ClickHouse还不支持向导模式。导入操作步骤如下:

1. 新建数据源

使用dataworks将数据从源库同步到目标库,通常需要新建源库和目标库的数据源连接,由于云数据库ClickHouse目前仅仅支持脚本配置模式,因此只需要配置源库的数据源连接,目标库ClickHouse不需要配置数据源连接。配置方法如下:

  1. 进入数据集成空间。
  2. 新建源库数据源连接。配置操作请参考新增数据源
说明 仅仅需要配置源库的数据源连接,ClickHouse无需配置数据源。

2.新建同步任务

进入DataWorks数据集成空间,新建数据同步任务。

如下图所示:新建数据同步任务1新建数据同步任务3
说明 由于云数据库ClickHouse只支持脚本模式,通过XML文件配置数据同步逻辑,点前上述图片中的“点击转换为脚本”链接,切换到脚本模式。
新建同步任务4

3.同步参数配置

数据同步逻辑配置在XML文件中,reader插件表示数据源,各个reader插件配置,请参考reader插件参数

将数据导入ClickHouse,writer部分同步任务的脚本配置实例如下:

{
    "job": {
        "setting": {
            "speed": {
                "byte":10485760
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.02
            }
        },
        "content": [
            {
                "reader": {
                    "name": "streamreader",
                    "parameter": {
                        "column" : [
                            {
                                "value": "DataX",
                                "type": "string"
                            },
                            {
                                "value": 19890604,
                                "type": "long"
                            },
                            {
                                "value": "1989-06-04 00:00:00",
                                "type": "date"
                            },
                            {
                                "value": 123.123,
                                "type": "double"
                            }
                        ],
                        "sliceRecordCount": 100000
                    }
                },
                "writer": {
                    "name": "clickhousewriter",
                    "parameter": {
                        "username": "test",
                        "password": "test",
                        "column": ["str_col", "long_col", "create_time", "double_col"],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:clickhouse://11.157.212.86:3001",
                                "table": ["test_tbl"]
                            }
                        ],
                        "preSql": [],
                        "postSql": [],

                        "batchSize": 65536,
                        "batchByteSize": 134217728,
                        "dryRun": false,
                        "writeMode": "insert"
                    }
                }
            }
        ]
    }
}
参数说明如下:
  • jdbcUrl: 一般使用VPC地址串,保证数据传输速度。如果使用公网,则可能受限于网络带宽问题,无法高效导入。在连接串中可以包含DB名字,比如jdbc:clickhouse://<host>:<port>/<db_name>。连接串中的端口号需要使用ClickHouse的HTTP端口。
  • batchSize:插入时攒批,可以有效提升插入速度。此参数的含义是:单个batch的最大行数。
  • batchByteSize:单个batch的最大字节数。当它与batchSize同时设置时,哪个条件先满足,哪个条件先生效。
  • preSql:执行数据同步任务之前率先执行的SQL。
  • postSql:执行数据同步任务之后率先执行的SQL。

4.调度参数配置

脚本模式数据同步任务,与其他所有ETL任务一样,需要配置调度参数,主要是任务依赖关系和调度周期,请参考 调度参数配置

5.独享资源组创建

配置云数据库ClickHouse,需要购买独享资源组进行任务调度,如下图所示,点击右侧数据集成资源组配置,打开资源组配置页面。

独享资源组配置

点击新建独享资源组按钮进入独享资源组管理页面,如下图所示,点击该页面的新增独享资源组创建独享资源组,创建完成后,资源组状态变为运行中,然后点击修改归属工作空间将该资源组绑定到数据同步任务所在的dataworks空间。

独享资源组1

新增U型资源组操作如下图所示,选择独享数据集成资源组,输入资源组名称备注等基本信息,点击购买链接进入购买机器资源,够吗机器资源完成后,在请选择订单号选项里选择出现最新的购买订单进行资源关联,可用区选项请选择机器资源所在可用区。

独享资源组2

在购买机器页面,选择云数据库ClickHouse所在地域和可用区,选择独享数据集成资源,根据数据同步任务数量和数据量选择合适的资源规格,然后提交订单。

独立资源组3

购买完成之后还需要执行:专有网络绑定。这一步是独享资源组网络打通的关键。绑定和ClickHouse实例相同的VPC和交换机。

专有网络绑定

6.发布数据同步任务

购买机器资源成功,新增独享资源组成功,将独立资源组绑定到dataworks工作空间后,返回数据同步任务配置页面,选择新增的独享资源组,完成配置后发布数据同步任务。如下图所示,分别点击保存提交按钮发布任务

数据同步任务9

同步任务运行和排错,请参考dataworks数据同步或ETL任务的通用管理和运维配置,运行和排错

写入慢问题排查。
写入慢通常有如下几个可能的原因:
  • 参数设置不合理。ClickHouse适合使用大batch、少数几个并发进行写入。多数情况下batch可以高达几万甚至几十万(取决于您的单行RowSize大小,一般按照每行100Byte进行评估,您需要根据实际数据特征进行估算)。并发数建议不超过10个。您可以调整不同参数进行尝试。
  • DataWorks独享资源组的ECS规格太小。比如独享资源的CPU/Memory太小,导致并发数、网络出口带宽受限;或者是batch设置太大而Memory太小,引起DataWorks进程Java GC等。您可以通过DataWorks的输出日志,进行确认。
  • 从数据源中读取慢。您可以在DataWorks输出日志中搜索totalWaitReaderTime、totalWaitWriterTime,如果发现totalWaitReaderTime明显大于totalWaitWriterTime,则表明主要耗时在读取端,而不是写入端。
  • 使用了公网endpoint。公网endpoint的带宽非常有限,无法承载高性能的数据导入导出,请替换为VPC网络的endpoint。
网络不通问题的原因:
  • ClickHouse没有加IP白名单。
  • 独享资源组没有进行专有网络绑定。