背景
为了前端更快地进行数据检索,需要将数据存储到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证书时设置的密码)
如果对你有帮助,记得点个赞哟!