hbase数据备份或者容灾方案
2016-09-09 16:55
211 查看
hbase数据备份或者容灾方案
时间 2014-11-11 22:07:14 IT社区推荐资讯原文 http://itindex.net/detail/51698-hbase-数据-备份
主题 HBase 数据备份 http://hbase.apache.org/book.html#ops.backup
HBase的数据备份或者容灾方案有这几种:Distcp,CopyTable,Export/Import,Snapshot,Replication,以下分别介绍(以下描述的内容均是基于0.94.20版本)。
一、Distcp
在使用distcp命令copy hdfs文件的方式实现备份时,需要禁用备份表确保copy时该表没有数据写入,对于在线服务的hbase集群,该方式不可用,而且在一些文章中可以看到通过distcp文件恢复hbase表时需使用:bin/hbase org.jruby.Main bin/add_table.rb /hbase/testtable命令把从hdfs目录中恢复表的元数据,然后重启hbase,但是0.94之后的版本的bin目录下均没有找到add_table.rb文件,似乎hbase已经废弃该功能。
二、CopyTable
执行命令前,需先创建表支持时间区间、row区间,改变表名称,改变列簇名称,指定是否copy删除数据等功能,例如:
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --starttime=1265875194289 --endtime=1265878794289 --peer.adr= dstClusterZK:2181:/hbase --families=myOldCf:myNewCf,cf2,cf3 TestTable
1、同一个集群不同表名称
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=tableCopy srcTable
2、跨集群copy表
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=dstClusterZK:2181:/hbase srcTable
该方式,原表、目标表的名称相同
全部使用方式如下:
MR的map数量与表的region数相同,与HFile文件个数无关。
CopyTable工具采用scan查询,写入新表时采用put和delete API,全是基于hbase的client api进行读写,无法使用Import工具的bulk导入。
三、Export/Import
通过Export导出数据到目标集群的hdfs,再在目标集群执行import导入数据,Export支持指定开始时间和结束时间,因此可以做增量备份,Export工具参数如下:可见,在导出时可以指定version,starttime,endtime等参数,并且可以通过-D指定是否压缩,指定caching等属性,比如:
hbase org.apache.hadoop.hbase.mapreduce.Export test4 hdfs://t2-namenode:9000/test4_90 1 1415693812520 1415694912520
Export导出工具与CopyTable一样是依赖hbase的scan读取数据,并且采用的InportFormat与CopyTable一样是TableInputFormat类,从该类的getSplits()方法可以看出MR的map数与hbase表的region数相同。
Import工具参数如下:
在import时可以指定使用bulk的方式,bulk是生成hfile格式的文件,直接导入到Region,无需经历hbase的写数据过程,从而无需消耗memstore,无需Flush等,更加高效,如果不指定bulk文件路径(hdfs的路径)则会采用hbase
的put和delete API进行写入。
To import 0.94 exported files in a 0.96 cluster or onwards, you need to set system property "hbase.import.version" when running the import command as below:
$ bin/hbase -Dhbase.import.version=0.94 org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
使用Import工具前必须先创建表,关于hbase.import.version属性是0.96的功能。
四、Snapshot
开启快照功能,在hbase-site.xml文件中添加如下配置项:<property>
<name>hbase.snapshot.enabled</name>
<value>true</value>
</property>
在hbase shell中使用clone_snapshot, delete_snapshot, list_snapshots, restore_snapshot, snapshot命令可是是想创建快照,查看快照,通过快照恢复表,通过快照创建一个新的表等功能,需要注意的是:如果该表开启了replication功能实现主从同步则在使用restore_snapshot功能对主表进行恢复时,必须先停止replication功能并且redo the bootstrap,因为replication是基于WAL日志实现的,而snapshot是直接在hdfs层面不是基于hbase的put、delete等API进行的,不会写WAL日志。
在创建snapshot后,可以通过ExportSnapshot工具把快照导出到另外一个集群,实现数据备份或者数据迁移,ExportSnapshot工具的用法如下:
例如:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot test4_snapshot_201411111422 -copy-to hdfs://t2-namenode:9000/hbase -mappers 2
执行该命令后,在t2-namenode:9000的hdfs中会把test4_snapshot_201411111422文件夹copy到/hbase/.hbase-snapshot文件下,进入t2-namenode这个hbase集群,执行list_snapshots会看到有一个快照:test4_snapshot_201411111422,通过命令clone_snapshot可以把该快照copy成一个新的表,不用提前创建表,新表的region个数等信息完全与快照保持一致。
在使用snapshot把一个集群的数据copy到新集群后,应用程序开启双写,然后可以使用Export工具把快照与双写之间的数据导入到新集群,从而实现数据迁移,为保障数据不丢失,Export导出时指定的时间范围可以适当放宽。
五、Replication
可以通过replication机制实现hbase集群的主从模式,具体步骤如下:1、 zookeeper不能被hbase托管,如果主从hbase集群共用一个zk集群,则zookeeper.znode.parent不能都是默认的hbase,可以配置为hbase-master和hbase-slave
2、 在主hbase集群的hbase-site.xml中添加配置项:
<property>
<name>hbase.replication</name>
<value>true</value>
</property>
<property>
<name>replication.source.nb.capacity</name>
<value>25000</value>
<description>主集群每次向从集群发送的entry最大的个数,默认值25000,可根据集群规模做出适当调整</description>
</property>
<property>
<name>replication.source.size.capacity</name>
<value>67108864</value>
<description>主集群每次向从集群发送的entry的包的最大值大小,默认为64M</description>
</property>
<property>
<name>replication.source.ratio</name>
<value>1</value>
<description>主集群使用的从集群的RS的数据百分比,默认为0.1,需调整为1,充分利用从集群的RS</description>
</property>
<property>
<name>replication.sleep.before.failover</name>
<value>2000</value>
<description>主集群在RS宕机多长时间后进行failover,默认为2秒,具体的sleep时间是: sleepBeforeFailover + (long) (new Random().nextFloat() * sleepBeforeFailover) </description>
</property>
<property>
<name>replication.executor.workers</name>
<value>1</value>
<description>从事replication的线程数,默认为1,如果写入量大,可以适当调大</description>
</property>
3、在从hbase集群的hbase-site.xml中添加:
<property>
<name>hbase.replication</name>
<value>true</value>
</property>
4、 进入主集群的shell,执行:
add_peer 'ID' 'CLUSTER_KEY'
The ID must be a short integer. To compose the CLUSTER_KEY, use the following template:
hbase.zookeeper.quorum:hbase.zookeeper.property.clientPort:zookeeper.znode.parent
This will show you the help to setup the replication stream between both clusters. If both clusters use the same Zookeeper cluster, you have to use a different zookeeper.znode.parent since they can't write in the same folder.
5、 在从集群中创建一个与master集群相同的表
6、 修改表定义,开启复制功能
disable 'your_table'
alter 'your_table', {NAME => 'family_name', REPLICATION_SCOPE => '1'}
enable 'your_table
此处的REPLICATION_SCOPE => '1'中的1,与第3步中设置到“ID”相同
可以通过工具VerifyReplication对复制的数据一致性进行校验,需在主集群执行,例如:
hbase org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication --starttime=1265875194289 --stoptime=2265878794289 1 test4
用法如下:
提示:
1、 hbase的replication,如果是在建立主表和从表的关系前,主表已经有数据则该部分数据不会被同步到从表中,因为replication是依赖WAL日志进行的同步,可以通过如下步骤实现:
a) 通过snapshot把历史数据导入到从集群;
b) 开启replication;
c) 通过Export工具把快照和开启replication之间的数据导入到从表;
d) 通过VerifyReplication工具校验数据的一致性。
2、 如果客户端在写入数据时设置不写WAL日志,则会导致从集群不会同步数据;
3、 主从同步是异步的,因此数据不一定会立即同步到从表;
4、 创建主、从表后,在向主表写入数据时,停止从集群,写完后再开启从集群,这时如果主集群的WAL日志还在则会同步到从表中;
由于不写WAL日志的数据不会被同步到从集群,因此对于重要的数据建议再通过snapshot进行定期的备份。
分享
收藏
纠错
推荐文章
1. [Cassandra教程] (七)Java API 进阶 - 数据库连接池
2. 数据库高可用架构
3. [Cassandra教程] Java API 简单例子
4. 关于MongoDB Sharding,你应该知道的
5. 面试总结
6. MongoDB在58同城百亿量级数据下的应用实践
相关文章推荐
- hbase数据备份或者容灾方案
- HBase的数据备份容灾迁移方案:Distcp,CopyTable,Export/Import,Snapshot,Replication
- redis学习系列(四)--在项目中部署redis企业级数据备份方案以及各种踩坑的数据恢复容灾演练
- 中小企业如何用NAS构建低成本高性能远程备份数据容灾系统
- 网络附加存储设备NAS等设备应用在数据备份(本地及远程数据备份)、数据容灾应用中的分析
- 商场超市数据备份方案
- 存储解决方案: 存储网络容灾备份方案设计
- IBM的三种异地容灾备份方案
- 数据容灾备份:数据安全的最后一道防线
- IBM的三种异地容灾备份方案
- DSG证券基金行业本地异地容灾备份查询一体化方案(西部证券)
- ISCSI+单机同步软件构成局域网数据备份方案
- WordPress数据备份方案
- WordPress数据备份方案
- 数据备份与数据容灾
- 天热了,机器温度过高极易导致机器死机或者硬件损坏,大家要注意备份硬盘数据啊!不要像我!惨啊!
- 【DSG简介/案例】全球领先的致力于数据存储与容灾备份的专业厂商
- 数据备份与数据容灾