大数据产品的备份及恢复

  • Hbase

    • Distcp方式
    • 整体下载上传方式
    • CopyTable备份
    • Export工具
  • elasticsearch
    • 建立备份快照数据挂载点
    • 建立快照仓储repository
    • 建立snapshot快照备份
    • 恢复snapshot快照数据
      • 原集群恢复
      • 新集群恢复
  • HDFS

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 [email protected]:/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 PUT 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

参考:

时间: 2024-12-24 08:19:42

大数据产品的备份及恢复的相关文章

大数据产品不仅仅是IT工具

对于企业的业务人员,特别是数据科学家人群来说,Informatica的Intelligent Data Platform不仅是一个智能化的大数据预处理工具,而且可以像业务系统一样为企业带来直接的价值. 互联网企业通常会强调细节和微创新,把产品的某一项功能做到极致,借此牢牢吸引大量用户.但是企业级厂商则不同,它们更倾向于将产品平台化.平台化的好处是可以把尽量多的功能集成在一起,方便部署与管理,而且可以借平台屏蔽底层架构的复杂性.软件厂商尤喜平台化,比如数据保护厂商有数据保护和统一管理平台,大数据产

看完这些干货帖,大数据产品从入门到精通

摘要: 看完这些干货帖,了解大数据产品应用场景 欢迎来到"MVP教你玩转阿里云"系列教程,在这里,你将看到各行各业数字化转型的一线实践,学到资深开发者的经验结晶. 你将以云计算领域的技术领袖为师,加速了解阿里云技术产品和各行业数字化转型的场景. 点击关注,在真实业务场景里,加快技术成长,看懂数字中国. [入门级]MaxCompute 数据计算入门阿里云MaxCompute是大数据存储和分析平台.如何开通?如何使用表查询功能?如何使用UDF功能?看完这篇帖子,这些基础问题都将得到解答,你

oracle数据泵的备份和恢复

数据泵工具可以从命令好使用程序 expdp 和impdp中调用数据泵技术的特点导入/导出的所有工作都由数据库实例完成可以使用dbms_datapump pl/sql APL建立.检测和调用数据泵任务可以对IMPDP/ECPD导入导出任务进行重新启动,类似于网络下载的断点续传 expd的导出方式数据库方式,整个数据库被导出操作系统文件中用户模式,导出一个或多个用户下的所有数据和元数据表方式,导出的数据包括一组表中的所有数据和元素据表空间方式 导出时提取用于一个表空间的所有对像的数据. grant

大数据之sqoopCDH 备份

Sqoop课程笔记 一.概述 1.什么是sqoop? Hadoop的优势在于对数据的存储和处理,相比以前传统的数据库,在处理较较多的数据时,传统数据行业通过提升单机性能以提高处理性能,而且性价比随着性能提高越来越低,在场景下派生出的大数据行业. 同样的数据处理,hadoop无论是处理的性能和成本都远低于传统通过单机处理,但是从传统的数据处理切换到新生的hadoop平台,避免不了有数据迁移的过程,需要将传统数据按照hadoop的规则进行转换,中间需要一个转换的工具,由此派生出sqoop这样一个优秀

GreenPlum 大数据平台--segment 失效问题恢复

1,问题检查 [[email protected] conf]$ psql -c "select * from gp_segment_configuration where status='d'" dbid | content | role | preferred_role | mode | status | port | hostname | address | replication_por t ------+---------+------+----------------+--

大数据产品如果没有age函数,可以用以下两种方式实现计算年龄

一:这种方式是根据身份证的月份和当前月份,日和当前日来对比实现 select case when month(current_date) > substr(sfz,11,2) then year(current_date) - substr(sfz,7,4) when month(current_date) = substr(sfz,11,2) and day(current_date) > substr(sfz,13,2) then year(current_date) - substr(s

Docker 备份、恢复、迁移数据卷

可以利用数据卷对其中的数据进行进行备份.恢复和迁移. 备份 首先使用 --volumes-from 标记来创建一个加载 dbdata 容器卷的容器,并从本地主机挂载当前到容器的 /backup 目录.命令如下: $ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata 容器启动后,使用了 tar 命令来将 dbdata 卷备份为本地的 /backup/ba

大数据系列(1)——Hadoop集群坏境搭建配置

前言 关于时下最热的技术潮流,无疑大数据是首当其中最热的一个技术点,关于大数据的概念和方法论铺天盖地的到处宣扬,但其实很多公司或者技术人员也不能详细的讲解其真正的含义或者就没找到能被落地实施的可行性方案,更有很多数据相关的项目比如弄几张报表,写几个T-SQL语句就被冠以“大数据项目”,当然了,时下热门的话题嘛,先把“大数据”帽子扣上,这样才能显示出项目的高大上,得到公司的重视或者高层领导的关注. 首先,关于大数据的概念或者架构一直在各方争议的背景下持续的存在着.目前,关于大数据项目可以真正被落地

开源数据库Postgresql的备份和恢复

最近工作上使用的数据库一直是Postgresql,这是一款开源的数据库,而且任何个人可以将该数据库用于商业用途.在使用Postgresql的时候,让我最明显的感觉就是这数据库做的真心好,虽然说数据库的安装包真的很小,但是性能和操作的便捷是一点也不输给其他商业的大型数据库,另外在命令行界面下对该数据库直接进行操作的感觉真的是很爽.在使用数据库的时候,我们作为小公司的数据库管理员有一项工作是不可能避免的,那就是数据的备份和恢复问题.PostgreSQL虽然各个方面的有点很多,但是在数据库备份这方面,