首页 > 其他分享 >ClickHouse数据迁移工具之clickhouse-copier

ClickHouse数据迁移工具之clickhouse-copier

时间:2023-04-19 17:45:03浏览次数:35  
标签:xml task -- zookeeper copier clickhouse ClickHouse

ClickHouse数据迁移工具之clickhouse-copier
clickhouse需要从单节点迁移至副本集群中,表结构统一修改为副本表

网上搜到的迁移方式大致为三种。

一、拷贝数据目录

操作流程

在源集群的硬盘上打包好对应数据库或表的 data 和 metadata 数据

拷贝到目标集群对应的目录

重启 clickhouse-server

二、remote函数

INSERT INTO <local_database>.<local_table>
SELECT * FROM remote('remote_clickhouse_addr', <remote_database>, <remote_table>, '<remote_user>', '<remote_password>')

ClickHouse数据迁移工具之clickhouse-copier
clickhouse需要从单节点迁移至副本集群中,表结构统一修改为副本表

网上搜到的迁移方式大致为三种。

一、拷贝数据目录

操作流程

在源集群的硬盘上打包好对应数据库或表的 data 和 metadata 数据

拷贝到目标集群对应的目录

重启 clickhouse-server

二、remote函数

INSERT INTO <local_database>.<local_table>
SELECT * FROM remote('remote_clickhouse_addr', <remote_database>, <remote_table>, '<remote_user>', '<remote_password>')

三、clickhouse-copier

clickhouse-copier是 ClickHouse 官方提供的一款数据迁移工具,可用于把表从一个集群迁移到另一个(也可以是同一个)集群。Clickhouse-copier 使用 Zookeeper 来管理同步任务,可以同时运行多个 clickhouse-copier 实例

由于数据迁移后的每个表需要在集群上创建一份副本集,因此将迁移后的所有表引擎需要修改为ReplicatedMergeTree家族。

这里使用clickhouse-copier和remote(用来同步没有分区的表)进行数据迁移

clikhouse-copier
优点

支持并发同步,可以运行多个clickhouse-copier实例
使用zookeeper同步写入状态,支持增量同步
可以在配置文件内重新定义写入的表引擎
表名与数据库名不需要相同
可指定source与sink的shard,replica
缺点

配置文件较为繁琐,每个不同实例clickhouse-copier任务的配置文件都需要上传至zookeeper相应实例节点上
慢。相比于直接迁移文件,clickhouse-copier相当于多次执行insert into操作,因此迁移速度较慢
使用clickhouse-copier需要注意的点

source表需要定义了partition,不然任务同步报错
zookeeper内存储的是已处理过的partition信息,再次运行clickhouse-copier,同步的仅是未处理过的partition数据。对于已经同步后的partition,即使partition内有新增数据,也不会同步到目标集群上。
clickhouse-copier无法同步普通视图,但可以同步物化视图,若同步物化视图,需要在source的表名前加上.inner.,不然会提示找不到table
使用Clickhouse-copier需要借助zookeeper,为减少网络流量,建议clickhouse-copier在源数据所在的服务器上运行。
clickhouse-copier --config test.xml --task-path /clickhouse/copier_task2/download_task

常用参数

daemon — 后台运行copier工具,进程将在后台启动。

config — zookeeper.xml的存放路径,用来连接zookeeper集群。

task-path — zookeeper上的存储节点路径,例如:/clickhouse/copier_task/task1;该路径中的内容用来存储任务,以及多个copier进程间的协调信息,建议不同的数据任务,路径不要重名,例如:/clickhouse/copier_task/task2,task3,task4,或者每天同步做一次数据copy的话,也可以以当天日期命名,task-2021-01-27,但同一任务的不同copier进程要保持一致的配置路径。

task-file — 指向配置了任务的配置文件,例如:copy-job.xml,该文件内容会上传到zookeeper的/clickhouse/copier_task/task1/description节点。

task-upload-force — 若设置为true,那么将根据task-file文件的内容,强制刷新覆盖上个参数提到的zookeeper的description节点。

base-dir — 会存储一些日志以及相关的辅助型文件,copier工具进程启动后,会在$base-dir创建copier_YYYYMMHHSS_<PID>格式的子目录(日志文件会在该子目录下,以及辅助型分布式表的相关信息在data目录下),若没有传该参数,则在copier运行的当前目录创建。
clickhouse-copier同步流程
1.创建zookeeper.xml配置信息

<yandex>
<logger>
<level>trace</level>
<log>./log/clickhouse-copier/copier/log.log</log>
<errorlog>./log/clickhouse-copier/copier/log.err.log</errorlog>
<size>100M</size>
<count>3</count>
</logger>

<zookeeper>
<node>
<host>data-hadoop-1</host>
<port>2181</port>
</node>
<node>
<host>data-hadoop-2</host>
<port>2181</port>
</node>
<node>
<host>data-hadoop-3</host>
<port>2181</port>
</node>
<node>
<host>data-hadoop-4</host>
<port>2181</port>
</node>
<node>
<host>data-hadoop-5</host>
<port>2181</port>
</node>
</zookeeper>
</yandex>
2.在zookeeper上创建任务路径

zkCli -server hadoop-110:2181 create /clickhouse/copier_task

zkCli -server hadoop-110:2181 create /clickhouse/copier_task/${task_name}

3.创建对应的${task_name}.xml配置信息

<yandex>
<!-- remote_servers与/etc/clickhouse-server/config.xml下的remote_servers相同 -->
<remote_servers>
<!-- 需要同步的source集群的集群名 -->
<test_shard_localhost>
<shard>
<internal_replication>false</internal_replication>
<replica>
<host>data-hadoop-5</host>
<port>9000</port>
<user>default</user>
<password>test</password>
</replica>
</shard>
</test_shard_localhost>
<!-- 目标集群配置信息 -->
<bigdata_one_shard_two_replication>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>data-clickhouse-1</host>
<port>9000</port>
<user>default</user>
</replica>
<replica>
<host>data-clickhouse-2</host>
<port>9000</port>
<user>default</user>
</replica>
</shard>
</bigdata_one_shard_two_replication>
</remote_servers>
<!-- copier最大进程数 -->
<max_workers>4</max_workers>
<!-- 同步表信息 -->
<tables>
<!-- table_test 分类标签,仅用来区分不同的表同步任务 -->
<table_test>
<!-- pull信息,被同步的表位置 -->
<cluster_pull>test_shard_localhost</cluster_pull>
<database_pull>dw</database_pull>
<table_pull>test</table_pull>
<!-- push信息 -->
<cluster_push>bigdata_one_shard_two_replication</cluster_push>
<database_push>dw</database_push>
<table_push>test</table_push>
<!-- 目的表的engine信息,同步时会根据此engine配置创建表 -->
<engine>
ENGINE=ReplicatedMergeTree('/clickhouse/tables/{shard}/dw/test', '{replica}')
PARTITION BY toYYYYMMDD(toDateTime(trace_download_ts))
ORDER BY tuple()
SETTINGS index_granularity = 8192
</engine>
<!-- 分布式表shard -->
<sharding_key>01</sharding_key>
<!-- 查询源数据时可以添加的过滤条件 -->
<!--
<where_condition> CounterID != 0 </where_condition>
-->
<!-- 指定同步的具体分区,若无此参数,则默认同步全部分区,partition值为system.part对应表的partition column -->
<!--
<enabled_partitions></enabled_partitions>
-->
</table_test>
<!--
<table_2>
....
</table_2>
-->
</tables>
</yandex>

4.将相应的${task_name}.xml上传到相应zookeeper路径的${path}/description节点上,有两种方法。

一种是直接将文件内容上传至description节点上

zkCli -server hadoop-110:2181 create /clickhouse/copier_task/${task_name}/description "`cat ${task_name}.xml`"

一种是利用参数上传文件

clickhouse-copier --config zookeeper.xml --task-path /clickhouse/copier_task/${task_name} --task-file=${task_name}.xml

5.执行clickhouse-copier

clickhouse-copier --config zookeeper.xml --task-path /clickhouse/copier_task/${task_name}
————————————————
版权声明:本文为CSDN博主「团子Yui」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39182815/article/details/116935419


三、clickhouse-copier

clickhouse-copier是 ClickHouse 官方提供的一款数据迁移工具,可用于把表从一个集群迁移到另一个(也可以是同一个)集群。Clickhouse-copier 使用 Zookeeper 来管理同步任务,可以同时运行多个 clickhouse-copier 实例

由于数据迁移后的每个表需要在集群上创建一份副本集,因此将迁移后的所有表引擎需要修改为ReplicatedMergeTree家族。

这里使用clickhouse-copier和remote(用来同步没有分区的表)进行数据迁移

clikhouse-copier
优点

支持并发同步,可以运行多个clickhouse-copier实例
使用zookeeper同步写入状态,支持增量同步
可以在配置文件内重新定义写入的表引擎
表名与数据库名不需要相同
可指定source与sink的shard,replica
缺点

配置文件较为繁琐,每个不同实例clickhouse-copier任务的配置文件都需要上传至zookeeper相应实例节点上
慢。相比于直接迁移文件,clickhouse-copier相当于多次执行insert into操作,因此迁移速度较慢
使用clickhouse-copier需要注意的点

source表需要定义了partition,不然任务同步报错
zookeeper内存储的是已处理过的partition信息,再次运行clickhouse-copier,同步的仅是未处理过的partition数据。对于已经同步后的partition,即使partition内有新增数据,也不会同步到目标集群上。
clickhouse-copier无法同步普通视图,但可以同步物化视图,若同步物化视图,需要在source的表名前加上.inner.,不然会提示找不到table
使用Clickhouse-copier需要借助zookeeper,为减少网络流量,建议clickhouse-copier在源数据所在的服务器上运行。
clickhouse-copier --config test.xml --task-path /clickhouse/copier_task2/download_task

常用参数

daemon — 后台运行copier工具,进程将在后台启动。

config — zookeeper.xml的存放路径,用来连接zookeeper集群。

task-path — zookeeper上的存储节点路径,例如:/clickhouse/copier_task/task1;该路径中的内容用来存储任务,以及多个copier进程间的协调信息,建议不同的数据任务,路径不要重名,例如:/clickhouse/copier_task/task2,task3,task4,或者每天同步做一次数据copy的话,也可以以当天日期命名,task-2021-01-27,但同一任务的不同copier进程要保持一致的配置路径。

task-file — 指向配置了任务的配置文件,例如:copy-job.xml,该文件内容会上传到zookeeper的/clickhouse/copier_task/task1/description节点。

task-upload-force — 若设置为true,那么将根据task-file文件的内容,强制刷新覆盖上个参数提到的zookeeper的description节点。

base-dir — 会存储一些日志以及相关的辅助型文件,copier工具进程启动后,会在$base-dir创建copier_YYYYMMHHSS_<PID>格式的子目录(日志文件会在该子目录下,以及辅助型分布式表的相关信息在data目录下),若没有传该参数,则在copier运行的当前目录创建。
clickhouse-copier同步流程
1.创建zookeeper.xml配置信息

<yandex>
<logger>
<level>trace</level>
<log>./log/clickhouse-copier/copier/log.log</log>
<errorlog>./log/clickhouse-copier/copier/log.err.log</errorlog>
<size>100M</size>
<count>3</count>
</logger>

<zookeeper>
<node>
<host>data-hadoop-1</host>
<port>2181</port>
</node>
<node>
<host>data-hadoop-2</host>
<port>2181</port>
</node>
<node>
<host>data-hadoop-3</host>
<port>2181</port>
</node>
<node>
<host>data-hadoop-4</host>
<port>2181</port>
</node>
<node>
<host>data-hadoop-5</host>
<port>2181</port>
</node>
</zookeeper>
</yandex>

2.在zookeeper上创建任务路径

zkCli -server hadoop-110:2181 create /clickhouse/copier_task

zkCli -server hadoop-110:2181 create /clickhouse/copier_task/${task_name}

3.创建对应的${task_name}.xml配置信息

<yandex>
<!-- remote_servers与/etc/clickhouse-server/config.xml下的remote_servers相同 -->
<remote_servers>
<!-- 需要同步的source集群的集群名 -->
<test_shard_localhost>
<shard>
<internal_replication>false</internal_replication>
<replica>
<host>data-hadoop-5</host>
<port>9000</port>
<user>default</user>
<password>test</password>
</replica>
</shard>
</test_shard_localhost>
<!-- 目标集群配置信息 -->
<bigdata_one_shard_two_replication>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>data-clickhouse-1</host>
<port>9000</port>
<user>default</user>
</replica>
<replica>
<host>data-clickhouse-2</host>
<port>9000</port>
<user>default</user>
</replica>
</shard>
</bigdata_one_shard_two_replication>
</remote_servers>
<!-- copier最大进程数 -->
<max_workers>4</max_workers>
<!-- 同步表信息 -->
<tables>
<!-- table_test 分类标签,仅用来区分不同的表同步任务 -->
<table_test>
<!-- pull信息,被同步的表位置 -->
<cluster_pull>test_shard_localhost</cluster_pull>
<database_pull>dw</database_pull>
<table_pull>test</table_pull>
<!-- push信息 -->
<cluster_push>bigdata_one_shard_two_replication</cluster_push>
<database_push>dw</database_push>
<table_push>test</table_push>
<!-- 目的表的engine信息,同步时会根据此engine配置创建表 -->
<engine>
ENGINE=ReplicatedMergeTree('/clickhouse/tables/{shard}/dw/test', '{replica}')
PARTITION BY toYYYYMMDD(toDateTime(trace_download_ts))
ORDER BY tuple()
SETTINGS index_granularity = 8192
</engine>
<!-- 分布式表shard -->
<sharding_key>01</sharding_key>
<!-- 查询源数据时可以添加的过滤条件 -->
<!--
<where_condition> CounterID != 0 </where_condition>
-->
<!-- 指定同步的具体分区,若无此参数,则默认同步全部分区,partition值为system.part对应表的partition column -->
<!--
<enabled_partitions></enabled_partitions>
-->
</table_test>
<!--
<table_2>
....
</table_2>
-->
</tables>
</yandex>

4.将相应的${task_name}.xml上传到相应zookeeper路径的${path}/description节点上,有两种方法。

一种是直接将文件内容上传至description节点上

zkCli -server hadoop-110:2181 create /clickhouse/copier_task/${task_name}/description "`cat ${task_name}.xml`"

一种是利用参数上传文件

clickhouse-copier --config zookeeper.xml --task-path /clickhouse/copier_task/${task_name} --task-file=${task_name}.xml

5.执行clickhouse-copier

clickhouse-copier --config zookeeper.xml --task-path /clickhouse/copier_task/${task_name}

引用于:https://blog.csdn.net/qq_39182815/article/details/116935419

标签:xml,task,--,zookeeper,copier,clickhouse,ClickHouse
From: https://www.cnblogs.com/harda/p/17334108.html

相关文章

  • 云时代,MySQL到ClickHouse数据同步产品对比推荐
    ClickHouse在执行分析查询时的速度优势很好的弥补了MySQL的不足,但是对于很多开发者和DBA来说,如何将MySQL稳定、高效、简单的同步到ClickHouse却很困难。本文对比了NineData、MaterializeMySQL(ClickHouse自带)、Bifrost三款产品,看看他们在同步时的差异。对比结果概述整体上......
  • ClickHouse集群+ZooKeeper集群架构下的ZooKeeper集群迁移
     ClickHouse集群+ZooKeeper集群架构下的ZooKeeper集群迁移 目前测试环境的ck集群+zk集群架构如下:ClickHouseZooKeeper192.168.1.171192.168.1.172192.168.1.173192.168.1.174192.168.1.171192.168.1.172192.168.1.173由于ck和zk混搭在一块,存在较为严重......
  • clickhouse创建一个表
    ###########删除某个clickhouse表droptabledb_center.QT_PLATE_VAL_INFO_EX_LYR ###########创建表CREATETABLEdb_center.QT_PLATE_VAL_INFO_EX_LYR(`PLATE_UNI_CODE`Int64,`END_DATE`DateTime,`PLATE_LYR`Nullable(Float64),`PLATE......
  • ClickHouse用户管理安全指南
    用户管理用户信息存储在user.xml文件中。通常建议多个用户,使用单独的XML文件进行管理。默认是位于目录/etc/clickhouse-server/users.d/下。例如,创建如下两个用户:ClickHouse和abce​<users><clickhouse><networks><ip>127.0.0.1</ip>......
  • MongoDB、Redis、HBase、Cassandra、Elasticsearch、ClickHouse等NoSQL数据库简介及优
    MongoDBMongoDB是一个基于文档的NoSQL数据库,它使用BSON(二进制JSON)格式存储数据。MongoDB支持动态查询,可以轻松地处理非结构化数据。它还支持水平扩展,可以在多个节点上分布数据。优点:灵活性高,支持非结构化数据存储。支持水平扩展,可以在多个节点上分布数据。支持动态查询,可......
  • Java ClickHouse整合—官方教程
    一、开发环境OpenJDK版本>=17ClickHouse:20.7+ 1、支持的数据类型FormatSupportCommentAggregatedFunction❌limitedto groupBitmap,andknowntohaveissuewith64bitbitmapArray(*)✅Bool✅Date*✅DateTime*✅Decimal*✅SEToutput_format_decimal_trailing_zeros=1 in......
  • oracle, mysql, clickhouse创建表的DDL语句参考
    这里展示的oracle,mysql,clickhouse下面如何创建一个表的DDL语句。请注意这里的数据类型,在不同的表,表示形式不一样。   Oracle的DDL语句 --UPCENTER.PUB_PLATE_INFOdefinitionCREATETABLE"UPCENTER"."PUB_PLATE_INFO"("ISVALID"NUMBER(1,0)NO......
  • 1、Clickhouse 单节点与集群部署
    一、单节点部署1.1、修改文件描述符 vim/etc/security/limits.conf*softnofile65536*hardnofile65536*softnproc131072*hardnproc131072 vim/etc/security/limits.d/20-nproc.conf*softnofile65536*hardnofile65536*softnproc131072*hard......
  • clickhouse
    目录第一章clickhouse概述1.1clickhouse的定义1.2clickhouse的来源1.3clickhouse应用领域1.4clickhouse优点1.5clickhouse缺点第二章单机版安装2.1rpm安装(也可以在线yum安装)2.2配置2.3服务启动2.4客户端连接第三章集群安装3.1安装3.2配置3.3服务启动3.4客户端连......
  • clickhouse
    ck是一个列式存储的数据库,其针对的场景是OLAP。OLAP的特点是:数据不经常写,即便写也是批量写。不像OLTP是一条一条写大多数是读请求查询并发较少,不适合放置先生高并发业务场景使用 ,CK本身建议最大一秒100个并发查询。不要求事务click的优点#为了增强压缩比例,ck存储的一列......