数据迁移利器登场!Elasticdumpv6.110震撼发布,助你轻松搬迁大数据!

news2024/11/26 10:33:19

b680e189a1ab8325ceebd4a27d446449.jpeg

简介

     Elasticdump 是一个用于导出和导入 Elasticsearch 数据的工具。它能够从一个 Elasticsearch 集群读取数据并写入到另一个 Elasticsearch 集群、文件系统或其他数据存储(例如 S3)。这个工具非常有用,特别是在进行数据迁移、备份和恢复操作时。elasticdump 支持多种数据类型,包括索引数据、设置、映射、模板、别名等。

安装

wget https://github.com/elasticsearch-dump/elasticsearch-dump/archive/refs/tags/v6.110.0.tar.gz
tar -xvf elasticsearch-dump-6.110.0.tar
mv elasticsearch-dump-6.110.0 elasticdump
cd elasticdump\bin

迁移功能

  1. 数据迁移

  2. 数据备份与恢复

  3. 配置和映射迁移

  4. S3 数据迁移

  5. 分片级别的数据迁移

  6. 数据过滤迁移

  7. 别名(Alias)和模板(Template)迁移

功能用法

#将索引从生产环境复制到目标环境,包括分析器、映射和数据
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=http://staging.es.com:9200/my_index \
  --type=analyzer
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=http://staging.es.com:9200/my_index \
  --type=mapping
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=http://staging.es.com:9200/my_index \
  --type=data


# 将索引导出到文件:
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=/data/my_index_mapping.json \
  --type=mapping
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=/data/my_index.json \
  --type=data


# 将索引导出到文件并压缩
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=$ \
  | gzip > /data/my_index.json.gz


# 将查询结果备份到文件
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=query.json \
  --searchBody="{\"query\":{\"term\":{\"username\": \"admin\"}}}"
  
# 将查询结果备份到文件,检索条件在/data/searchbody.json里面
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=query.json \
  --searchBody=@/data/searchbody.json  


# 拷贝指定分片数据到目标,api索引的第24分片:
elasticdump \
  --input=http://es.com:9200/api \
  --output=http://es.com:9200/api2 \
  --input-params="{\"preference\":\"_shards:24\"}"


# 将索引的别名备份到一个文件中,修改index-name
elasticdump \
  --input=http://es.com:9200/index-name/alias-filter \
  --output=alias.json \
  --type=alias


# 导入别名文件到es中
elasticdump \
  --input=./alias.json \
  --output=http://es.com:9200 \
  --type=alias


# 模板备份到一个文件中
elasticdump \
  --input=http://es.com:9200/template-filter \
  --output=templates.json \
  --type=template


# 将模版导入到ES中
elasticdump \
  --input=./templates.json \
  --output=http://es.com:9200 \
  --type=template


# 索引数据导出到一个文件中,并将文件拆分成多个部分,每部分的大小为10MB
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=/data/my_index.json \
  --fileSize=10mb


# 从 Amazon S3 导入到 Elasticsearc
export access_key_id="你的AWS访问密钥ID"
export access_key_secret="你的AWS秘密访问密钥"
elasticdump \
  --s3AccessKeyId "${access_key_id}" \
  --s3SecretAccessKey "${access_key_secret}" \
  --input "s3://${bucket_name}/${file_name}.json" \
  --output=http://production.es.com:9200/my_index


# 从 ES 导入到Amazon S3
export access_key_id="你的AWS访问密钥ID"
export access_key_secret="你的AWS秘密访问密钥"
elasticdump \
  --s3AccessKeyId "${access_key_id}" \
  --s3SecretAccessKey "${access_key_secret}" \
  --input=http://production.es.com:9200/my_index \
  --output "s3://${bucket_name}/${file_name}.json"


# 从指定的 MinIO 存储中读取一个 JSON 文件,然后将该文件中的数据导入到指定的 Elasticsearch 索引中
export access_key_id="你的MinIO访问密钥ID"
export access_key_secret="你的MinIO秘密访问密钥"
elasticdump \
  --s3AccessKeyId "${access_key_id}" \
  --s3SecretAccessKey "${access_key_secret}" \
  --input "s3://${bucket_name}/${file_name}.json" \
  --output=http://production.es.com:9200/my_index
  --s3ForcePathStyle true
  --s3Endpoint https://production.minio.co


# 从指定的 Elasticsearch 索引导入到指定的 MinIO 存储中
export access_key_id="你的MinIO访问密钥ID"
export access_key_secret="你的MinIO秘密访问密钥"
elasticdump \
  --s3AccessKeyId "${access_key_id}" \
  --s3SecretAccessKey "${access_key_secret}" \
  --input=http://production.es.com:9200/my_index \
  --output "s3://${bucket_name}/${file_name}.json"
  --s3ForcePathStyle true
  --s3Endpoint https://production.minio.co


# 将文件csv数据导入到ES中
elasticdump \
  # csv:// prefix must be included to allow parsing of csv files
  # --input "csv://${file_path}.csv" \
  --input "csv:///data/cars.csv"
  --output=http://production.es.com:9200/my_index \
  --csvSkipRows 1    # used to skip parsed rows (this does not include the headers row)
  --csvDelimiter ";" # default csvDelimiter is ','

参数详解

--input                    源位置(必需)
--input-index              源索引和类型(默认:全部,例如:index/type)
--output                   目标位置(必需)
--output-index             目标索引和类型(默认:全部,例如:index/type)
--big-int-fields           指定应检查大整数支持的字段的逗号分隔列表(默认:'')
--bulkAction               设置用于准备发送到 Elasticsearch 请求体的操作类型(默认:index,可选项:[index, update, delete, create])
--ca, --input-ca, --output-ca CA 证书。如果源和目标相同,请使用 --ca。否则,根据需要使用前缀为 --input 或 --output 的证书。
--cert, --input-cert, --output-cert 客户端证书文件。如果源和目标相同,请使用 --cert。否则,根据需要使用前缀为 --input 或 --output 的证书。
--csvConfigs               设置所有 fast-csv 配置。可以提供一个转义的 JSON 字符串或文件。文件位置必须以 @ 符号为前缀(默认:null)
--csvCustomHeaders         用作数据标题的逗号分隔值列表。此参数必须与 `csvRenameHeaders` 一起使用(默认:null)
--csvDelimiter             分隔列的分隔符(默认:',')
--csvFirstRowAsHeaders     如果设置为 true,则第一行将被视为标题(默认:true)
--csvHandleNestedData      设置为 true 以处理嵌套的 JSON/CSV 数据。注意:这是一个非常有主见的实现!(默认:false)
--csvIdColumn              提取记录标识符(id)的列名。导出到 CSV 时,可以使用此列覆盖默认的 id (@id) 列名(默认:null)
--csvIgnoreAutoColumns     设置为 true 以防止将以下列 @id、@index、@type 写入输出文件(默认:false)
--csvIgnoreEmpty           设置为 true 以忽略空行(默认:false)
--csvIncludeEndRowDelimiter 设置为 true 以在 CSV 末尾包含行分隔符(默认:false)
--csvIndexColumn           提取记录索引的列名。导出到 CSV 时,可以使用此列覆盖默认的索引 (@index) 列名(默认:null)
--csvLTrim                 设置为 true 以左侧修剪所有列(默认:false)
--csvMaxRows               如果数字 > 0,则仅解析指定数量的行(例如:100 将返回前 100 行数据)(默认:0)
--csvRTrim                 设置为 true 以右侧修剪所有列(默认:false)
--csvRenameHeaders         如果希望删除文件的第一行并用 `csvCustomHeaders` 选项中提供的行替换(默认:true)
--csvSkipLines             如果数字 > 0,则将跳过指定数量的行(默认:0)
--csvSkipRows              如果数字 > 0,则跳过指定数量的解析行。注意:(如果第一行被视为标题,它们不算在内)(默认:0)
--csvTrim                  设置为 true 以修剪所有列中的空白(默认:false)
--csvTypeColumn            提取记录类型的列名。导出到 CSV 时,可以使用此列覆盖默认的类型 (@type) 列名(默认:null)
--csvWriteHeaders          决定是否将标题写入 CSV 文件(默认:true)
--customBackoff            启用自定义退避函数(s3)
--debug                    显示正在使用的 Elasticsearch 命令(默认:false)
--delete                   在将文档从输入位置移动时逐个删除文档。不会删除源索引(默认:false)
--delete-with-routing      将路由查询参数传递给删除函数,用于将操作路由到特定分片(默认:false)
--esCompress               如果为 true,则在请求中添加一个 Accept-Encoding 头以请求服务器的压缩内容编码(如果尚未存在),并解码响应中的支持内容编码。注意:对响应内容的自动解码仅对通过请求返回的 body 数据执行(包括通过请求流和传递给回调函数),但不对响应流执行(从响应事件中可获得的未修改的 http.IncomingMessage 对象,可能包含压缩数据)
--fileSize                 支持文件拆分。该值必须是 **bytes** 模块支持的字符串。以下缩写必须用于表示单位大小:b 表示字节,kb 表示千字节,mb 表示兆字节,gb 表示千兆字节,tb 表示太字节,例如:10mb / 1gb / 1tb。分区有助于通过有效地将文件分割成较小的块来缓解溢出/内存不足异常,然后可以根据需要合并这些块。
--filterSystemTemplates    是否删除 metrics-*-* 和 logs-*-* 系统模板(默认:true)
--force-os-version         强制使用 elasticsearch-dump 使用的 OpenSearch 版本(默认:7.10.2)
--fsCompress               在将输出发送到文件之前进行 gzip 压缩。在导入时使用此命令解压缩 gzipped 文件
--handleVersion            告诉 elasticsearch 传输处理数据集中存在的 `_version` 字段(默认:false)
--headers                  向 Elasticsearch 请求添加自定义头(当你的 Elasticsearch 实例位于代理后面时很有用)(默认:'{"User-Agent": "elasticdump"}')。支持基于类型/方向的头。例如:input-headers/output-headers(这些头仅在当前流程类型为 input/output 时添加)
--help                     帮助页面
--ignore-errors            在写入错误时继续读/写循环(默认:false)
--ignore-es-write-errors   在 Elasticsearch 写入错误时继续读/写循环(默认:true)
--inputSocksPort, --outputSocksPort Socks5 主机端口
--inputSocksProxy, --outputSocksProxy Socks5 主机地址
--inputTransport           提供一个自定义的 js 文件用作输入传输
--key, --input-key, --output-key 私钥文件。如果源和目标相同,请使用 --key。否则,根据需要使用前缀为 --input 或 --output 的密钥。
--limit                    每个操作移动的对象数量。对于文件流,限制是近似的(默认:100)
--maxRows                  支持文件拆分。文件按指定的行数拆分
--maxSockets               进程可以进行的同时 HTTP 请求数量是多少?(默认:5 [node <= v0.10.x] / Infinity [node >= v0.11.x])
--noRefresh                禁用输入索引刷新。优点:1. 大幅增加索引速度,2. 硬件需求大幅降低。缺点:1. 最近添加的数据可能未被索引。建议用于大数据索引,在速度和系统健康优先于最近添加的数据时使用。
--offset                   包含要从输入传输中跳过的行数的整数。当导入大型索引时,可能会出现问题,例如连接中断、崩溃、忘记 `screen` 等。这允许你从上次记录的偏移量重新开始导出。请注意,由于初始导出时没有指定排序,因此无法保证跳过的行已被写入/解析。这更像是一个选项,用于在不关心丢失一些行的情况下获取尽可能多的数据到索引中,类似于 `timeout` 选项(默认:0)
--outputTransport          提供一个自定义的 js 文件用作输出传输
--overwrite                如果输出文件存在则覆盖(默认:false)
--params                   向 Elasticsearch 请求 URI 添加自定义参数。当你希望使用 elasticsearch preference 时很有用。--input-params 是一个特定的参数扩展,可在使用 scroll API 获取数据时使用。--output-params 是一个特定的参数扩展,可在使用 bulk index API 索引数据时使用。注意:这些是为了避免在一个输入参数用于输出源时出现的参数污染问题(默认:null)
--parseExtraFields         要解析的元字段的逗号分隔列表
--pass, --input-pass, --output-pass 私钥的密码短语。如果源和目标相同,请使用 --pass。否则,根据需要使用前缀为 --input 或 --output 的密码短语。
--quiet                    除错误外,抑制所有消息(默认:false)
--retryAttempts            指定在连接失败时应自动重试请求的次数,例如遇到 `ECONNRESET`, `ENOTFOUND`, `ESOCKETTIMEDOUT`, `ETIMEDOUT`, `ECONNREFUSED`, `EHOSTUNREACH`, `EPIPE`, `EAI_AGAIN` 等错误时(默认:0)
--retryDelay               指定重试尝试之间的回退/中断时间(毫秒)(默认:5000)
--retryDelayBase           用于操作重试的指数回退的基础毫秒

注意事项

  • 版本兼容性:确保 elasticdump 版本与 Elasticsearch 版本兼容。在导出和导入数据之前,查看官方文档以了解特定版本的兼容性问题。

  • 数据一致性:在进行数据迁移时,尤其是大规模数据迁移时,数据的一致性非常重要。可以考虑在迁移前将索引设置为只读模式,以避免数据写入不一致的情况。

  • 性能和资源使用:elasticdump 进行大规模数据迁移时可能会消耗大量的资源,包括 CPU、内存和网络带宽。建议在非高峰时段进行操作,或分批次进行迁移以减少对生产环境的影响。

  • 权限:确保有足够的权限来访问 Elasticsearch 集群和数据存储(如 S3)。在使用带有身份验证的集群时,需要正确配置用户名、密码和其他认证信息。

  • 数据安全:在涉及敏感数据时,确保数据传输是加密的。例如,使用 HTTPS 而不是 HTTP,以防止数据在传输过程中被截获。

  • 错误处理:elasticdump 提供了一些选项来处理错误,例如 --ignore-errors 和 --retryAttempts。在使用这些选项时,需要权衡数据完整性和迁移速度。

总结

      elasticdump 是一个功能强大且灵活的工具,能够简化 Elasticsearch 数据的导出和导入过程。无论是备份、恢复,还是集群迁移,它都提供了丰富的选项和配置,以满足不同场景的需求。然而,在使用 elasticdump 时,需要注意版本兼容性、性能影响和数据一致性等问题,以确保数据迁移过程顺利进行。通过合理的规划和配置,elasticdump 可以有效地帮助用户管理和维护 Elasticsearch 数据。

加入数据库技术交流群:

f8e9134a48a50cc1070e282a18eedb0d.jpeg

进群福利:

1、知识共享与学习机会

2、问题求助与解决支持

3、技术沉淀和分享平台

4、及时了解行业动态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1693802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

# AI产品经理的自我修养:既懂用户,更懂技术!

今天上班的时候&#xff0c;发现很多AI社群都在讨论一篇播客《一个顶级AI产品经理的自我修养&#xff0c;对谈光年之外产品负责人Hidecloud》&#xff0c;这篇播客的嘉宾是光年之外的产品负责人——Hidecloud&#xff08;张涛&#xff09;&#xff0c;聊了许多关于他在做AI产品…

ubuntu20.04 安装系统后-开机黑屏-nvidia显卡驱动没问题_thinkpad-intel-13700H

文章目录 硬件现象原因&解决 硬件 thinkpad p1 gen6笔记本&#xff0c; intel 13代cpu 13700H,nvidia rtx 2000 Ada laptop gpu 13700H应该是有集显的&#xff0c;但可能没装集显驱动or由于Bios设置的缘故&#xff0c;我的win任务管理器只能看到一个gpu(gpu0)&#xff1…

Spring Boot 01:Spring Boot 项目的两种创建方式

一、前言 记录时间 [2024-05-25] 本文讲述 Spring Boot 项目的两种创建方式&#xff0c;分别是 IDEA 和官网。 由 Spring 官网知&#xff0c;当前 Spring Boot 的最新版本为 3.3.0&#xff0c;需要最低 JDK 版本为 17。 Spring 官网项目创建地址JDK 17 版本下载地址 准备工作…

【Linux网络】端口及UDP协议

文章目录 1.再看四层2.端口号2.1引入linux端口号和进程pid的区别端口号是如何生成的传输层有了pid还设置端口号端口号划分 2.2问题2.3netstat 3.UDP协议3.0每学一个协议 都要讨论一下问题3.1UDP协议3.2谈udp/tcp实际上是在讨论什么&#xff1f; 1.再看四层 2.端口号 端口号(Po…

《计算机网络微课堂》1-6 计算机体系结构

常见的计算机网络体系结构 从本节课开始&#xff0c;我们要用 4 次课的时间来介绍有关计算机网络体系结构的知识&#xff0c;具体包含以下内容&#xff1a; 一&#xff0c;常见的计算机网络体系结构二&#xff0c;计算机网络体系结构分层的必要性三&#xff0c;计算机网络体系…

MPLS LDP原理与配置

1.LDP基本概念 &#xff08;1&#xff09;LDP协议概述 &#xff08;2&#xff09;LDP会话、LDP邻接体、LDP对等体 &#xff08;3&#xff09;LSR ID 与LDP ID &#xff08;4&#xff09;LDP消息 ⦁ 按照消息的功能&#xff0c;LDP消息一共可以分为四大类型&#xff1a;发现…

【UE数字孪生学习笔记】 使用DataSmith对模型快速导入 UE5.3.2使用unreal DataSmith文件

声明&#xff1a;部分内容来自于b站&#xff0c;慕课&#xff0c;公开课等的课件&#xff0c;仅供学习使用。如有问题&#xff0c;请联系删除。 部分内容来自UE官方文档&#xff0c;博客等 UE5.3.2使用 3D Max 导出的unreal DataSmith文件 1. 去UE官网下载DataSmith导出器并导…

QAnything 1.4.1 中的文档解析

2024年初我们开源了QAnything&#xff0c;一个基于检索增强生成式应用&#xff08;RAG&#xff09;的本地知识库问答系统。对于本地知识库&#xff0c;QAnything支持多种格式的文档输入&#xff0c;允许用户上传包括PDF、图片、Word、PowerPoint、Excel、TXT&#xff0c;甚至音…

默认路由实现两个网段互通实验

默认路由实现两个网段互通实验 **默认路由&#xff1a;**是一种特殊的静态路由&#xff0c;当路由表中与数据包目的地址没有匹配的表项时&#xff0c;数据包将根据默认路由条目进行转发。默认路由在某些时候是非常有效的&#xff0c;例如在末梢网络中&#xff0c;默认路由可以…

牛客NC334 字典序第K小【困难 10叉树 Java/Go/PHP/C++】,力扣 440. 字典序的第K小数字

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/670c2bda374241d7ae06ade60de33e8b https://leetcode.cn/problems/k-th-smallest-in-lexicographical-order/description/ 本答案核心 10叉树, 数学规律Java代码 import java.util.*;public class Solution {…

【Android开发】Android请求出现网络请求失败,HTTP请求,安全网络通信与权限管理

额外权限 要有这个权限&#xff1a; <uses-permission android:name"android.permission.INTERNET" />HTTP安全考虑 从 Android 9&#xff08;API 级别 28&#xff09;开始&#xff0c;默认情况下不支持通过 HTTP 访问网络&#xff0c;而要求使用 HTTPS。这…

微服务-系统架构

微服务&#xff1a; 系统架构的演变 单一应用架构 早期的互联网应用架构&#xff0c;大量应用服务 功能 集中在一个包里&#xff0c;把大量的应用打包为一个jar包&#xff0c;部署在一台服务器&#xff0c;例如tomcat上部署Javaweb项目 缺点:耦合度高&#xff0c;一台服务器…

科林Linux5_线程

一、线程基础 进程是操作系统经典的执行任务的生产力。 进程是最小的资源分配单位&#xff0c;进程的内存开销较大&#xff0c;在内存资源不变的情况下&#xff0c;提高进程的执行能力&#xff08;生产力&#xff09; 线程寄存在进程中&#xff0c;与进程共享资源&#xff0…

Leetcode 876. 链表的中间结点

题目描述 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&#xff0c…

2024年【N1叉车司机】免费试题及N1叉车司机模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机免费试题考前必练&#xff01;安全生产模拟考试一点通每个月更新N1叉车司机模拟试题题目及答案&#xff01;多做几遍&#xff0c;其实通过N1叉车司机模拟考试题库很简单。 1、【多选题】《中华人民共和国特…

Spring AMQP 随笔 8 Retry MessageRecoverer ErrorHandler

0. 列位&#xff0c;响应式布局好麻烦的 … 有意思的&#xff0c;chrome devtool 在调试响应式的分辨率的时候&#xff0c;比如说在 宽度远远大于 768 的时候&#xff0c;按说浏览器也知道大概率是 web端方式打开&#xff0c;样式也是如此渲染&#xff0c;但一些事件(没有鼠标…

题解:P9535 [YsOI2023] 连通图计数

题意 求&#xff1a;在所有 n n n 个点 m m m 条边的无向简单连通图中&#xff0c;满足把第 i i i 个点删去后图被分为 a i a_i ai​​ 个连通块。 n − 1 ≤ m ≤ n 1 n-1\le m\le n1 n−1≤m≤n1。 思路 将 m n − 1 , m n , m n 1 mn-1,mn,mn1 mn−1,mn,mn1​ 三…

二叉树——堆详解

目录 前言&#xff1a; 一、堆的结构 二、向上调整和向下调整 2.1 向上调整 2.2 向下调整 2.3 向上调整和向下调整时间复杂度比较 三、堆的实现 3.1 堆的初始化 3.2 堆的销毁 3.3 堆的插入 3.4堆的删除 3.5 取堆顶元素 3.6 对堆判空 四、堆排序 五、TOP-K 问题 六、代码总…

电商公司需不需要建数字档案室呢

建立数字档案室对于电商公司来说是非常有必要的。以下是一些原因&#xff1a; 1. 空间节约&#xff1a;数字档案室可以将纸质文件转化为电子文件&#xff0c;节省了大量存储空间。这对于电商公司来说尤为重要&#xff0c;因为他们通常会有大量的订单、客户信息和供应商合同等文…

Python01:初入Python(Mac)

Python环境准备 下载Python&#xff1a;官网https://www.python.org/ 下载PyCharm&#xff1a;官网https://www.jetbrains.com/pycharm/download Python与PyCharm的关系 Python&#xff08;解释器&#xff09;&#xff1a;机器语言—>翻译人员–>翻译成电脑能读懂的 PyC…