ES备份数据-快照模式-并恢复---HDFS篇---推荐好用

我这边采用快照的模式进行备份数据

备份源的es 版本要等于低于恢复elasticsearch集群的版本;

先看下:

Hadoop HDFS Repository Plugin:Hadoop HDFS Repository Plugin | Elasticsearch Plugins and Integrations [7.16] | Elastic

要注意自己版本哈 我的是7.16

ES集群快照存在版本兼容性问题:Snapshot and restore | Elasticsearch Guide [8.13] | Elastic

下载es-hdfs插件包:

https://artifacts.elastic.co/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-7.16.0.zip

我就直接wget了

这里有一点要注意 插件版本必须与es版本一摸一样 差一点都不行 不然会出现报错.  ——例如:你用 7.16.0插件就得 7.16.0。哪怕 7.16.3都不行 !!!

安装插件

/opt/dtstack/es/es/bin/elasticsearch-plugin install file:///opt/repository-hdfs-7.16.0.zip

安装完成后 在es的plugins目录就会有这个插件

ll /opt/dtstack/es/es/plugins/

记得给其他es节点安装哈 不能只安装一台!---其他节点安装步骤省略 都一样。

都安装后就重启ES服务吧。

让我们查看已ES安装的插件信息

curl -XGET 'http://hadoop01:9200/_cat/plugins?v'

这样就对啦

然后我们就开始创建备份仓库了

首先在HDFS创建一个es的目录 并且要有elsearch权限哈

hdfs dfs -mkdir /es_backup

要注意hdfs权限哈

然后es创建快照仓库

curl -XPUT 'http://hadoop01:9200/_snapshot/my_backup' -H 'content-Type:application/json' -d '

{

    "type": "hdfs",

    "settings": {

    "uri": "hdfs://hadoop02:9000/",

    "path": "/es_backup",

    "max_snapshot_bytes_per_sec": "50mb",

    "max_restore_bytes_per_sec": "50mb"

}}'

max_snapshot_bytes_per_sec:当快照数据进入仓库时,这个参数控制这个过程的限流情况。默认是每秒 50mb 。

max_restore_bytes_per_sec:当从仓库恢复数据时,这个参数控制什么时候恢复过程会被限流以保障你的网络不会被占满。默认是每秒 50mb

uri:写hdfs主的那个

查看 Elasticsearch 中所有可用的快照仓库列表

curl -XGET 'http://hadoop01:9200/_cat/repositories?v'

备份数据 我这边内网环境所以用curl啦

curl -XPUT "hadoop01:9200/_snapshot/my_backup/snapshot_2024-05-23?wait_for_completion=true"

查看备份情况

curl -XGET http://hadoop01:9200/_snapshot/my_backup/snapshot_2024-05-24

让我们查看下HDFS的数据

hdfs dfs -ls /es_backup

我们把这个数据get下来 用来去另一套环境恢复用

hdfs dfs -get /es_backup

传输到另一套环境

scp -r es_backup/ 172.16.121.150:/opt

然后让我们去新搭建的es环境上 把数据还原

首先在新环境查看下集群健康情况及索引信息

新环境集群健康情况

curl -X GET "http://localhost:9200/_cluster/health?pretty"

查看所有索引的列表

curl -XGET 'http://emr1:9200/_cat/indices?v'

然后安装插件 和上面步骤一样也是3台

我这边选择用小版本高的ES 同时测试下高版本es是否可以导入恢复数据

wget https://artifacts.elastic.co/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-7.17.10.zip

安装

/opt/dtstack/es/es/bin/elasticsearch-plugin install file:///opt/repository-hdfs-7.17.10.zip

全部es节点搞完后重启es。

让我们查看已ES安装的插件信息

curl -XGET 'http://emr1:9200/_cat/plugins?v'

这样就可以了

然后我们把上一个快照传到HDFS上

hdfs dfs -put es_backup/ /

再创建一个创建 HDFS 的存储库快照(在跨集群还原索引快照的时候,我们需要在目标集群中创建与原始集群具体相同名称的存储库)

curl -XPUT 'http://emr1:9200/_snapshot/my_backup' -H 'content-Type:application/json' -d '

{

    "type": "hdfs",

    "settings": {

    "uri": "hdfs://172.16.121.123:9000/",

    "path": "/es_backup",

    "max_snapshot_bytes_per_sec": "50mb",

    "max_restore_bytes_per_sec": "50mb"

}}'

列出已注册的快照存储库并查看可用的快照

curl -XGET "http://emr1:9200/_snapshot/my_backup/_all?pretty"

恢复所有索引

curl -XPOST 'http://emr1:9200/_snapshot/my_backup/snapshot_2024-05-24/_restore?wait_for_completion=true&pretty' -H 'Content-Type: application/json' -d'

{

  "indices": "*",

  "ignore_unavailable": true,

  "include_global_state": true

}'

(1)ignore_unavailable,如果设置为true,则不存在的index会被忽略,不会进行备份。默认情况不设置

(2)include_global_state 设置为false,可以阻止集群把全局的state也作为snapshot一部分备份数据。

查询集群状态:

curl -X GET "http://localhost:9200/_cluster/health?pretty"

查看 Elasticsearch 中所有索引的列表

curl -XGET 'http://emr1:9200/_cat/indices?v'

查询数据

curl -X GET 'http://emr1:9200/my_index/_search?q=name:John'

搞定 数据没问题。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Java Spark中,你可以通过以下步骤从HDFS连接到HDFS并读取文件: 1. 首先,你需要导入必要的Spark和Hadoop依赖项。确保你的项目中包含了以下依赖项: ```xml <dependencies> <!-- Spark dependencies --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.7</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.4.7</version> </dependency> <!-- Hadoop dependencies --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.3.0</version> </dependency> </dependencies> ``` 2. 创建一个`SparkSession`对象,并设置相关的Hadoop配置。你可以使用`set`方法来设置以下配置: ```java import org.apache.spark.sql.SparkSession; SparkSession spark = SparkSession.builder() .appName("Read from HDFS") .master("local") // 设置为本地模式,你也可以根据实际情况设置为集群模式 .config("spark.hadoop.fs.defaultFS", "hdfs://localhost:9000") // 设置HDFS的默认文件系统 .getOrCreate(); ``` 3. 使用`spark.read()`方法读取HDFS文件。你需要传递文件路径作为参数,并且可以通过链式调用其他方法来进一步处理数据,例如`csv()`、`json()`等。 ```java import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; String filePath = "hdfs://localhost:9000/path/to/file"; Dataset<Row> data = spark.read().csv(filePath); ``` 4. 对数据进行操作和处理。你可以使用Spark的DataFrame API或Spark SQL来操作读取的数据。 5. 最后,记得关闭SparkSession以释放资源: ```java spark.close(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值