Logstash同步Hive和Clickhouse

如题所述

第1个回答  2022-06-18

工作中我们遇到了把Hive数据同步到Clickhouse的业务需求,一开始我们写Spark任务,用SparkSQL读Hive,再用JDBC写入到Clickhouse。

后来,随着要同步的表越来越多,每次都写Spark任务,成本就显得有些高了。于是,写了一个通用的Spark任务,指定Hive表、字段,指定Clickhouse表、字段,每次指定不同的参数。

再后来,业务越来越复杂,不仅是简单的同步,而是要支持更复杂的SQL,结果进行数据类型转换、值转化等,然后再插入Clickhouse。

这不是ETL要干的事儿吗?!

当然,继续增强之前的Spark,完全可以实现这个功能。但是说到ETL,不是有专业强大的Logstash吗,为什么要重复造轮子?

经过一番调研,还真有人写了Logstash插件,用来导出数据到Clickhouse: logstash-output-clickhouse

输出端搞定了,输入端怎么搞呢?很建达,用JDBC插件就可以了。

如上,配置jdbc连接信息即可。

需要说明的是,相关的jar包比较多,需要给全了,否则会有各种ClassNotFoundException。完整的jar列表为:

这些jar最好与hive环境版本一致,我们用的是CDH版,所以都是从CDH目录下找到的jar。

Clickhouse插件使用说明参考: https://github.com/mikechris/logstash-output-clickhouse

主要说下安装过程。

说明文档里说的 bin/logstash-plugin install logstash-output-clickhouse 方式,没有安装成功,所以只能自己编译安装。

先clone源码,然后进入源码根路径:

编译:

此时,若没有安装ruby环境,按照提示安装一下,再编译。

编译成功后,会多出一个文件

安装:

logstash的安装就不多说了,按照logstash官方文档安装就可以了。

此时,如果logstash版本是5.x,可能会遇到一个错误:

按照提示,修改gemfile:

修改logstash-mixin-http_client的版本:

原来是>6且<7,改成>5且<6。

然后,再次编译、安装,就可以了。

按照文档中的使用说明,配置Clickhouse连接信息即可:

这部分工作可以放在filter里处理,各种filter插件就不说了,参考logstash官方文档吧。

相似回答
大家正在搜