使用kettle同步全量数据到Elasticsearch(es)--elasticsearch-bulk-insert-plugin应用

背景

为了前端更快地进行数据检索,需要将数据存储到es中是一个很不错的选择。由于公司etl主要工具是kettle,这里介绍如何基于kettle的elasticsearch-bulk-insert-plugin插件将数据导入es。在实施过程中会遇到一些坑,这里记录解决方案。

可能会遇到的报错:
1、No elasticSearch nodes found
2、不支持ssl认证(用户名&密码)

后文提供解决办法

es插件配置

这里举个简单例子,将mysql的一张表导入到 es 中:

 表输入比较简单就不介绍了,这里讲下es插件的配置。
1、先配置 index、type, id(可以不设置)

  2、配置ip跟port

注意:port配置的是Tcp协议端口,也就是 9300,不是9200(底层采用的是TransportClient)

 3、设置字段映射

4、Settings配置

需要设置集群名称 cluster.name:elasticsearch

如果不知道cluster.name的话,可以访问9200端口,页面会显示详细信息。

 以上配置完成即可。

不出意外的话,意外来了。点击第2步的 test connect,会报错No elasticSearch nodes found

错误及解决办法

错误原因是因为 kettle6/7支持的es版本是es2.x,kettle8支持到es6。如果你的版本是es7及以上,自带的插件是不支持的。

需要下载插件源码,修改版本后,重新编译打包。

可以参考(这个是不支持ssl认证的):关于Kettle使用es批量导出插件支持ES5/ES6/ES7的说明_空山苦水禅人的博客-CSDN博客_kettle连接es5

在此基础上,本人修改了源码,再次编译,可以支持es7、es8并支持ssl用户名及密码验证。由于这步比较麻烦,直接放到网盘上。

链接:https://pan.baidu.com/s/1LWwH-u7r0uAUfVKSz5vmdQ 
提取码:gpm7

操作步骤:

1、删除data-integration\lib 下 所有 jackson- 开头的jar包,然后把jackson-2.8.10-libs文件夹中的jar拷到lib目录下

2、替换data-integration\plugins\elasticsearch-bulk-insert-plugin文件夹

3、如果开启了ssl认证,需要把 秘钥文件(.p12) 拷贝到data-integration\plugins\elasticsearch-bulk-insert-plugin\config目录下。

如果不确定是否开启ssl认证,可以看下配置文件elasticsearch.yml。

4、重启kettle即可。

如果开启了ssl 认证,还需要在插件中配置:

xpack.security.transport.ssl.keystore.password、xpack.security.user

 (注:秘钥文件密码  是在生成P12证书时设置的密码)

如果对你有帮助,记得点个赞哟!

猜你喜欢

转载自blog.csdn.net/samur2/article/details/128576164