• 大数据产品的备份及恢复


    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

        

    参考:

  • 相关阅读:
    appium 环境安装windows
    解决windows7无法连接CentOS7系统中oracle问题:ORA-12514 TNS 监听程序当前无法识别
    linux系统(CentOS7)虚拟机上安装oracle 11g,解决oracle图形界面卡住无法点击next问题
    python自动化测试框架学习
    VSCode + GDBServer 远程调试C/C++流水账
    IDEA 16注册
    VS2008非托管C++调用wcf(WebService)服务
    python 从数据库表生成model
    2015年工作总结
    dlib库学习之一
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/6807520.html
Copyright © 2020-2023  润新知