一、前言
ES
的备份,导入和导出相对而言比较麻烦。用logstash
的话,经常会出现很多错误,而且不是很方便。用bulk
也是一样的,对于咱们的json
文件的结构,一些字段名都有要求,也不方便。后来和大佬交流下才知道,原来ES
也有类似于MySQL
的mysqldump
工具,这里要说的插件是elasticdump
。
导入json数据到Elasticsearch(bulk方法)
logstash导入数据到Elasticsearch
二、正文
前提: 插件使用npm
安装,所以先保证本地安装有node
环境,且版本要大于v8
,尽量高一点就行。linux
下的安装参考文档,这里只介绍windows
下的安装
1、windows下安装
(1)新建文件夹elasticdump
(2)执行npm install
(3)执行 npm install elasticdump -g
(4)提示
D:\soft\node\elasticdump -> D:\soft\node\node_modules\elasticdump\bin\elasticdump
D:\soft\node\multielasticdump -> D:\soft\node\node_modules\elasticdump\bin\multielasticdump
+ elasticdump@4.7.0
2、导入数据到ES
(1)导入
elasticdump --input E:/files/es_zeusa.evony.com.accesslog/zeusa.evony.com.accesslog-2019.03.28.json --output "http://localhost:9200/zeusa.evony.com.accesslog-2019.03.28"
Wed, 17 Apr 2019 02:14:31 GMT | starting dump
Wed, 17 Apr 2019 02:14:31 GMT | got 100 objects from source file (offset: 0)
Wed, 17 Apr 2019 02:14:32 GMT | sent 100 objects to destination elasticsearch, wrote 100
Wed, 17 Apr 2019 02:14:58 GMT | Total Writes: 17041
Wed, 17 Apr 2019 02:14:58 GMT | dump complete
我这边的索引没有提前建好,只是在output
中命名了一下,是它自己创建的。这里看到已经导入成功了,速度挺快的
(2)导出
elasticdump --input http://localhost:9200/zeusa.evony.com.accesslog-2019.03.28 --output E:/files/es_zeusa.evony.com.accesslog/zeusa.evony.com.accesslog-2019.03.28.json
导入导出都差不多,input和output互换一下内容即可
三、优缺点
优点:
(1)同一份文档,用logstash
导入,会报错:
Field [_type] is a metadata field and cannot be added inside a document. Use the index API request parameters.
但是用es-dump
工具就不会报错。因为logstash
对于导入数据的格式,命名要求更严谨一些,不允许导入的数据用ES的关键字命名。而es-dump
不用担心这个
(2)导入速度方面也很快,至少在我本地导入的时候,比logstash
快
(3)轻量级,易上手
缺点:
(1)只是比较简单的工具,没有logstash
的过滤功能
最后: 还有很多功能,请参考github
上的文档,这里仅作为导入导出文件的工具使用。github
官方文档:https://github.com/taskrabbit/elasticsearch-dump
end