Elasticsearch索引的迁移。通过重新定义limit选项,Elasticdump可以实现快速处理

首先

使用Docker在本地机器上运行Elasticsearch。
由于想升级Elasticsearch的版本,所以决定将数据导出并迁移到新的环境。

預先調查

2020/11/20现在,通过使用谷歌搜索“elasticsearch索引迁移”,发现许多人使用名为Elasticdump的脚本。

(以下,根据谷歌搜索结果按顺序摘录)

将ElasticSearch的索引数据迁移 – Qiitaqiita.com › Node.js

经常使用的ElasticSearch查询(elasticdump)- Qiitaqiita.com › Elasticsearch
https://qiita.com/nakazii-co-jp/items/3199433d685d0600c6d6

经常使用的ElasticSearch查询(elasticdump)- Qiitaqiita.com › Elasticsearch
链接:https://qiita.com/nakazii-co-jp/items/3199433d685d0600c6d6

我想将Elasticsearch的数据导出并进行复制 – DRY的备忘录

在Elasticsearch上,可以相当简单地转储数据并导入到其他地方。

请用中文将以下内容进行改写:

..
.

elasticsearch-dump/elasticsearch-dump: 导入和导出工具- GitHubgithub.com › elasticsearch-dump › el…

有些前辈在Qiita上发布的文章都是5年前的,但是GitHub似乎在2020年之后还在频繁进行维护。不管elasticsearch的版本如何,我们可以无需担心地使用吗?
在谷歌搜索结果中显示的信息,我注意到有些创建日期稍旧,但如果2020年也在维护中,那么使用应该没有太大问题。出于期望,我决定也尝试使用这个node.js脚本。

准备好

由于elasticdump是一个node脚本,因此需要在计算机上安装node运行环境。在我的环境中,已经安装了node运行环境,所以我执行了npm install elasticdump(后来我意识到也可以使用docker)。

执行1(输出方式=dump, 输入方式=elasticsearch/index)

所有进行过事前调查的前辈都曾经说过,“elasricdump –output ^^^ –input ~~~”,只需指定输入和输出就可以进行数据导出,并将导出的数据加载到elasticsearch中,所以我也尝试着按照这个方法去做了一下,但是……

我的索引文件中有超过1200万个文档和超过6GB的存储空间。按照前辈们的方法,完成JSON的转储数据输出要花费24个小时。

出力されたファイルのサイズ: 5302184689 byte

<参考: 机器环境> 英特尔 i7-3770k,16GB 内存,960GB 固态硬盘
<参考: Docker 引擎> 版本号 v19.03.13
<参考: Docker 资源> CPU: 4 个,内存: 5.50GB,交换空间: 2GB,磁盘镜像大小: 59.6GB

回顾1

需要这么长时间吗?
看看操作记录… 原来是每次处理100个对象。
这个可以增加一些吗?

当阅读elasticsearch-dump在GitHub上的内容时,发现有一些配置选项可供选择。

--limit
                How many objects to move in batch per operation
                limit is approximate for file streams
                (default: 100)

好吧,那么在将转储的Json写入新环境时,我们可以添加“–limit”选项。

执行2(转储输出=elasticsearch/index,输入=json)

将执行1的输出和输入选项进行交换,并添加limit选项再次执行。看看增加处理对象数量的效果。不知道limit的值应该设置多少合适,这次就任意设为8000吧。

在这个设置下,处理时间约为1个半小时,大约大概快16倍。

回顾2

将limit的值设定为80倍,处理时间从24小时减少为1小时30分钟,缩短了16分之一。在这样的时间范围内,即使是个人使用的电脑也可以接受。虽然可能还存在其他瓶颈,但是在这个脚本中,limit的值无疑是影响处理时间的因素之一。如果有机会,我想进一步提高limit的值。然而,我不知道如何确定合适的值。是否可以凭借技术人员的直觉和经验来决定?

总结

在迁移Elasticsearch数据时,我使用了elasticdump脚本。虽然输入和输出数据转储的方向有所不同,但是通过将limit选项的设置值增加数十倍来比较处理速度。结果表明,通过增大limit选项的设置值,可以大幅减少处理时间。

广告
将在 10 秒后关闭
bannerAds