步骤1、安装达梦8国产数据库
参考笔者之前写的博文,怎么安装国产达梦8数据库,按博文提前装好!
https://blog.csdn.net/nasen512/article/details/126872483
步骤2、安装好clickhouse数据库
参考笔者之前写过的博文,将clickhouse数据库提前安装好!
https://blog.csdn.net/nasen512/article/details/126954425
步骤3、安装etl中间件ClickHouse JDBC Bridge
Clickhouse-jdbc-bridge:是clickhouse提供的一个jdbc组件,用于通过JDBC的方式远程访问其他数据库表。
Clickhouse支持通过JDBC连接外部数据库,所有支持JDBC驱动的数据库都能直接接入clickhouse。要实现JDBC连接,clickhouse需要使用以后台进程运行的程序 clickhouse-jdbc-bridge。
JDBC表引擎可以对接Mysql、Postgresql、SQLite等数据库,但是JDBC表引擎不能单独完成对接工作,需要依赖clickhouse-jdbc-bridge的查询代理服务,clickhouse-jdbc-bridge是java语言实现的sql代理服务,项目地址为:
https://github.com/ClickHouse/clickhouse-jdbc-bridge #作者的资源库有直接可以去下载RPM安装包
https://clickhouse.com/docs/zh/engines/table-engines/integrations/jdbc # clickhouse官网的介绍
我们看懂架构图,则需要保证
ClickHouse JDBC Bridge第三方插件要能正常练到2个数据库。我们可以把这个插件看出是2个数据库直接的桥梁!
达梦8数据库肯定是完整支持jdbc协议的,所以这个就存在2个数据库数据类型的一一映射关系,这个关系,就在ClickHouse JDBC Bridge维护。
步骤4、ClickHouse JDBC Bridge安装部署方法
一、ClickHouse JDBC Bridge下载安装RPM包
https://github.com/ClickHouse/clickhouse-jdbc-bridge #github下载地址
直接去笔者的资源库自行去下载更方便
rpm -ivh clickhouse-jdbc-bridge-2.1.0-1.noarch.rpm #安装命令
二、ClickHouse JDBC Bridge 配置
cd /etc/clickhouse-jdbc-bridge/config/datasources #安装成功后自动生成配置路径
根据模板生成配置
touch datasource.json #创建配置文件
{
"$schema": "../datasource.jschema",
"ch-server": {
"aliases": [
"self"
],
"driverUrls": [
"https://repo1.maven.org/maven2/com/clickhouse/clickhouse-jdbc/0.3.2-patch8/clickhouse-jdbc-0.3.2-patch8-http.jar"
],
"driverClassName": "com.clickhouse.jdbc.ClickHouseDriver",
"jdbcUrl": "jdbc:clickhouse://172.18.21.68:8123/system?compress=false",
"username": "default",
"password": "",
"maximumPoolSize": 5
},
"dm-server": {
"aliases": [
"dm"
],
"timezone":"GTM+8",
"converter": {
"mappings": [{ "nativeType": "TIMESTAMP", "toType": "String" },
{ "nativeType": "DATE", "toType": "String" }]
},
"driverUrls": [
"/etc/clickhouse-jdbc-bridge/drivers/DmJdbcDriver18.jar"
],
"driverClassName": "dm.jdbc.driver.DmDriver",
"jdbcUrl": "jdbc:dm://172.18.21.147:5236/NASEN",
"username": "NASEN",
"password": "",
"maximumPoolSize": 100
}
}
{
"$schema": "../datasource.jschema",
"ch-server": {
"aliases": [
"self"
],
"driverUrls": [
"https://repo1.maven.org/maven2/com/clickhouse/clickhouse-jdbc/0.3.2-patch8/clickhouse-jdbc-0.3.2-patch8-http.jar"
],
"driverClassName": "com.clickhouse.jdbc.ClickHouseDriver",
"jdbcUrl": "jdbc:clickhouse://172.18.25.88:8123/system?compress=false",
"username": "default",
"password": "123456",
"maximumPoolSize": 5
},
"dm-server": {
"aliases": [
"dm"
],
"timezone":"GTM+8",
"driverUrls": [
"/etc/clickhouse-jdbc-bridge/drivers/DmJdbcDriver18-8.1.2.141.jar"
],
"driverClassName": "dm.jdbc.driver.DmDriver",
"jdbcUrl": "jdbc:dm://172.18.21.167:5236?SCHEMA=dbname&localTimezone=480",
"username": "nasen",
"password": "123",
"maximumPoolSize": 100
}
上传启动包
cd /etc/clickhouse-jdbc-bridge/drivers
clickhouse-jdbc-0.3.2-patch8-http.jar
dm8-oracle-jdbc16-wrapper.jar
DmJdbcDriver18.jar
三、后台启动ClickHouse JDBC Bridge服务
nohup clickhouse-jdbc-bridge > /home/clickhouse-jdbc-bridge.log 2>&1 &
四、clickhouse设置与ClickHouse JDBC Bridge联通配置
cd /etc/clickhouse-server #进到配置路径
vi config.xml #追加配置文件最后
在文件最后追加下面内容
<jdbc_bridge>
<host>172.18.21.141</host>
<port>9019</port>
</jdbc_bridge>
五、clickhouse测试验证
select * from jdbc('', 'show datasources')
select * from jdbc('dm', 'select * from NASEN.NASEN_TEST')
作者总结
过程中遇到了一些问题比如时区的问题,数据同步之后,时区相差8小时!
过程很复杂,分析源码,反复测试,最终发现还有个隐藏的java时区的配置。是反复看了源码,最终猜出来的。
当然也是下段配置得到线索,最终通过代码加了那个配置。测试正常了!
笔者是去github上拿下源码,恢复到自己电脑上,凭运气分析,猜出来的,居然有个神秘的时区配置。
https://blog.csdn.net/nasen512/article/details/128446822 #笔者解决同步之后时间时常问题
把整个技术数据流程串联起来,就能完成达梦数据库与clickhouse数据的同步!当然clickhouse-jdbc-bridge是github上的国外的公益团队开发的插件,给他们点赞。笔者也把自己的经验写出来,希望可以帮助大家。
笔者自己攻克这个技术难题私下也是花了很多的时间,去攻读国外读文档,也参考很多同僚的文章总结的,整个过程还是挺不容易,尤其是解决那个时区的问题!
作者本人简介:现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目。并维护真实企业级生产数据库上千余个。紧急处理数据库生产事故上百起,挽回数据丢失所操作的灾难损失不计其数。