使用 DataX 迁移 ClickHouse 的数据
DataX 是个不错用的数据迁移工具。在实际使用的过程中,我做过各种数据库之间的迁移工作。如:Hive 到 MySQLMySQL 到 OSSMySQL 到 CVSOSS 到 ClickHouse其中也遇到过些问题,比如:DataX 是没有通过 jdbc 连接方式读取 hive 数据的 reader,当时没太注意有 rdbmsreader 这个官方提供的通用 RDBMS 读取插件,情急之下就自己根据
DataX 是个不错用的数据迁移工具。在实际使用的过程中,我做过各种数据库之间的迁移工作。
如:
- Hive 到 MySQL
- MySQL 到 OSS
- MySQL 到 CVS
- OSS 到 ClickHouse
其中也遇到过些问题,比如:DataX 是没有通过 jdbc 连接方式读取 hive 数据的 reader,当时没太注意有 rdbmsreader 这个官方提供的通用 RDBMS 读取插件,情急之下就自己根据插件开发规范写了个 hivejdbcreader 插件。至于用 rdbmsreader 插件能不能用 jdbc 方式从 hive 读取数据,因为有了前者至今也没试过。
下面就来说说如何使用 DataX 读取 ClickHouse 中的数据。DataX 只提供了 clickhousewriter,没有提供 clickhousereader。这次没打算直接再写个 ClickHouse 的 reader ,而是打算试试 rdbmsreader 能不能搞定 读取 ClickHouse 的事。首先,看了下 rdbmsreader 的文档,配置什么的基本都是差不多,就不多说了,只是有两个地方需要注意下:
- 需要修改 rdbmsreader 插件下的 plugin.json 文件,将 ClickHouse 的驱动类名“ru.yandex.clickhouse.ClickHouseDriver”加到配置文件的 drivers 里面;
- 将 ClickHouse 驱动相关的 jar 放到 rdbmsreader 插件下 libs 文件夹中。
在实际用的时候,ClickHouse 驱动使用的是 clickhouse-jdbc-0.2.4.jar,运行的分别报了两次的找不到类,根据提示又放入了 lz4-1.3.0.jar、guava-19.0.jar 两个包,问题搞定了。
两个配置文件如下:
plugin.json
{
"name": "rdbmsreader",
"class": "com.alibaba.datax.plugin.reader.rdbmsreader.RdbmsReader",
"description": "useScene: prod. mechanism: Jdbc connection using the database, execute select sql, retrieve data from the ResultSet. warn: The more you know about the database, the less problems you encounter.",
"developer": "alibaba",
"drivers": [
"dm.jdbc.driver.DmDriver",
"com.sybase.jdbc3.jdbc.SybDriver",
"com.edb.Driver",
"ru.yandex.clickhouse.ClickHouseDriver"
]
}
作业配置文件
{
"job": {
"setting": {
"speed": {
"channel": 4,
"record": -1,
"byte": -1,
"batchSize": 1024
}
},
"content": [{
"reader": {
"name": "rdbmsreader",
"parameter": {
"username": "aaa",
"password": "123456",
"column": [
"id",
"station_code"
],
"connection": [{
"querySql": [
" SELECT * FROM test_210812 "
],
"jdbcUrl": [
"jdbc:clickhouse://192.168.11.22:8123/CL_TEST"
]
}],
"fetchSize": 1024,
"where": " station_code like '2A%' "
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"print": true
}
}
}]
}
}
更多推荐
所有评论(0)