zoukankan      html  css  js  c++  java
  • 大数据产品的备份及恢复

    Hbase的备份恢复

    hbase数据备份策略有两类:

    1. 离线备份(关闭Hbase集群进行全备份,包括distcp方式、整体下载上传)
    2. 在线备份(在线对集群进行备份,存在数据丢失的风险)

     进行离线备份时,必须全部关闭Hbase集群,或者disable所有表,然后通过distcp命令将HDFS上的Hbase数据复制到另外或者同一个集群的不同目录就可以了。

    如果两个集群互不可见,那只能将数据文件下载到本地再上传(整体下载上传方式)。

      

    • Distcp方式

    如果是想将数据迁移到另一个Hbase集群的话,另一个hbase集群必须关闭,并且数据要复制到hbase.rootdir下。

    ①在新备份集群下建立一个文件夹,用来保存需要备份的数据:

    $HADOOP_HOME/bin/hadoop fs -mkdir /backup

    ②在旧集群执行:

    $HADOOP_HOME/bin/hadoop distcp hdfs://maste:9000/hbase hdfs://backup:9000/backup

    hdfs://maste:9000/hbase 是取的hbase-site.xml文件中hbase.rootdir的属性值(一定要参照rootdir的值,因为namenode做了HA的话,这里是有差异的)

    hdfs://backup:9000/backup 是备份数据的接收地址。

    执行命令以后hadoop会启动一个MapReduce任务,可以在50030页面进行查看;

    执行成功后,在新集群执行

    $HADOOP_HOME/bin/hadoop fs -ls /backup

     会发现backup目录下有一个hbase目录


    ③如果需要使用备份数据进行恢复的话,将数据移动到hbase.rootdir下,然后启动hbase即可。

    如果使用ambari的话,路径会有些差异,这里给出完整例子(从集群mycluster移动到集群mc2,其中mc2的active namenode是node1.mc.cn)

    #ssh连接mycluster机器的某节点
    su hdfs
    
    #备份到本集群
    hadoop distcp hdfs://mycluster/apps/hbase/data hdfs://mycluster/backup
    
    #迁移到另一集群mc(在mc上恢复)
    hadoop distcp hdfs://mycluster/apps/hbase/data hdfs://node1.mc.cn:8020/apps/hbase/
    
    #备份到另一集群mc(不恢复,只备份)
    hadoop distcp hdfs://mycluster/apps/hbase/data hdfs://node1.mc.cn:8020/backup

    如果要恢复数据的话,需要确认数据目录的Owner是hbase,否则hbase无法成功启动

      hadoop fs -chown -R hbase:hdfs /apps/hbase/data

      

    • 整体下载上传方式

    当两集群互不可见时,如果要离线备份恢复,可以使用这种方式。

    ①将备份集群和恢复集群都关闭

    ②下载待备份数据到本地

    ③将备份数据上传到待恢复集群

    ④启动集群

    示例:

    #注意命令执行的所在节点
    
    #将待备份数据下载到本地
    hadoop fs -copyToLocal /apps/hbase/data ~/backup/
    
    #将本地数据打包,拷贝到其他集群
    
    #在其他集群将打包后数据解压,并上传到hdfs
    hadoop fs -put ~/backup/* /apps/hbase/

      

    • CopyTable备份

    使用CopyTable可以将一张表的数据备份到另外一张表,也可以备份到另一集群的其他表中,要注意的是CopyTable备份不支持多版本。
    ①在新备份集群创建一张表,该表需要与备份表相同的结构:

    create 'newtable','a','b'

    ②使用命令进行全表备份:

    $HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=newtable --peer.adr=zookeeperhbase.zookeeper.quorum:2181:/hbase oldtable

    也可以只备份指定的某个列簇,下面的命令表示备份oldtable表中的列簇a到newtable表中

    $HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --families=a --new.name=newtable --peer.adr=zookeeperhbase.zookeeper.quorum:2181:/hbase oldtable

      

    • Export工具

    备份为Hdfs文件,支持数据多版本。此工具一次只能操作一张表,导出的顺序文件可以通过Import工具导入HBase。

    ①使用Export命令将表数据写为文件

    $HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.Export oldtable /backup/tableName

    查看HDFS上的backup目录会发现三个文件(_SUCCESS、_logs、part-m-00000):

    hadoop fs -ls  /backup

    ②使用distcp或者copyToLocal的方式将备份的数据从原hdfs集群拷贝到目标hdfs集群

    ③需要先建一个表来接收备份的表

    create 'newtable','a','b'

    ④使用Import命令导入存储文件,恢复Hbase数据

    $HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.Import newtable /backup/tableName

    ElasticSearch的备份恢复

    总体步骤:

    • 建立备份快照数据挂载点
    • 建立快照仓储repository
    • 建立snapshot快照备份
    • 恢复snapshot快照数据

    1.建立备份快照数据挂载点

    1. 安装EPEL
      rpm -i https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

       如果这个链接失效,可访问官网http://fedoraproject.org/wiki/EPEL

    2. 安装sshfs
      yum -y install sshfs fuse
    3. 目录共享
      #假设将数据共享到节点data.company.cn的目录 /mnt/es-data/(最好不要放在系统盘所在目录),在该节点上执行
      mkdir -m 777 /mnt/es-data
      
      #假设es集群的共享目录是 $elasticsearch_HOME/backup
      #在es集群的每个节点上执行
      cd $elasticsearch_HOME
      mkdir -m 777 backup
      #挂载共享目录 sshfs root@data.company.cn:
      /mnt/es-data $elasticsearch_HOME/backup -o allow_other

    2.建立快照仓储repository

    1. 修改ES配置文件
      vi config/elasticsearch.yml

       添加仓库路径(字符串中的路径就是在第一步中设定的共享目录路径)

       path.repo: ["/opt/module/elasticsearch-2.4.2/backup"]
    2.  重启elasticsearch
      kill `jps |grep Elasticsearch |cut -c1-5`
      bin/elasticsearch -d
    3. 创建仓库
      curl -X PUT 
        http://192.168.0.38:9200/_snapshot/mybackup 
        -d '{
          "type": "fs",
          "settings":{
              "compress": true,
              "location":"/opt/module/elasticsearch-2.4.2/backup"
          }
      }'
      
      #删除仓库
      curl -X DELETE http://192.168.0.38:9200/_snapshot/mybackup 

    3.建立snapshot快照备份

     快照指定索引(去掉参数数据的话,就是快照所有索引)

    curl -X PUT 
      http://192.168.0.38:9200/_snapshot/mybackup/snapshot_1 
      -d '{
        "indices": "myindex"
    }'
    
    #附
    #查看索引快照情况
    curl -X GET http://192.168.0.38:9200/_snapshot/mybackup/snapshot_1/_status?pretty
    
    #删除快照(也可用于中断正在进行的快照)
    curl -X DELETE http://192.168.0.38:9200/_snapshot/mybackup/snapshot_1

      

    4.恢复snapshot快照数据

    1. 如果备份数据要在新集群恢复,则需要先在新集群创建相同结构的index及type,并创建快照仓储(参照第二步
      curl -X POST 
        http://192.168.0.39:9200/yuqing 
        -d '{
          "settings":{
              "number_of_shards":5,
              "number_of_replicas":1
          },
          "mappings":{
              "article":{
                  "dynamic":"strict",
                  "properties":{
                      "title":{"type":"string","store":"yes","index":"analyzed","analyzer": "ik_max_word","search_analyzer": "ik_max_word"},
                      "types":{"type":"string","store":"yes","index":"analyzed","analyzer": "ik_max_word","search_analyzer": "ik_max_word"},
                      "url":{"type":"string","store":"no","index":"no"}
                  }
              }
          }
      }'
      ==========================
      #这里只是举例
    2. 需要先关闭index,否则会出现问题【cannot restore index [myindex] because it's open
      curl -X POST  http://192.168.0.38:9200/yuqing/_close
    3. 恢复数据(去掉参数即可恢复所有索引,否则恢复指定索引 myindex)
      curl -X POST http://192.168.0.38:9200/_snapshot/mybackup/snapshot_1/_restore 
      -d '{
          "indices": "myindex"
      }'
      
      #查看恢复进度
      curl -X GET http://192.168.0.38:9200/yuqing/_recovery
      
      #取消恢复(索引yuqing正在被恢复)
      curl -X DELETE http://192.168.0.38:9200/yuqing

        

    4. 重新开启index
      curl -X POST  http://192.168.0.38:9200/yuqing/_open

       执行下面语句就可以看到备份的数据了

      curl -X GET   http://192.168.0.38:9200/yuqing/article/_search

        

    参考:

  • 相关阅读:
    VysorPro助手
    Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset
    Play 2D games on Nexus 6P running Android N7.1.1 with Daydream View VR headset
    Native SBS for Android
    ADB和Fastboot最新版的谷歌官方下载链接
    How do I install Daydream on my phone?
    Daydream Controller手柄数据的解析
    蓝牙BLE传输性能及延迟分析
    VR(虚拟现实)开发资源汇总
    Android(Java)控制GPIO的方法及耗时分析
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/6807520.html
Copyright © 2011-2022 走看看