Hbase主-从集群备份

三种方法实现HBASE-从集群备份

1Export/Import

  • 通过Export导出数据到目标集群的hdfs,再在目标集群执行import导入数据,Export支持指定开始时间和结束时间,因此可以做增量备份,导出时可以指定versionstarttime(时间戳)endtime(时间戳)等参数,并且可以通过-D指定是否压缩,指定caching等属性,比如:

hbase  org.apache.hadoop.hbase.mapreduce.Export test4 hdfs://yun11.hdp.huayuntech.com:8020(从集群名称)/hbase

1   1415693812520   1415694912520

  • Export导出工具与CopyTable一样是依赖hbasescan读取数据,并且采用的InportFormatCopyTable一样是TableInputFormat类,从该类的getSplits()方法可以看出MRmap数与hbase表的region数相同。
  • import时可以指定使用bulk的方式,bulk是生成hfile格式的文件,直接导入到Region,无需经历hbase的写数据过程,从而无需消耗memstore,无需Flush等,更加高效,如果不指定bulk文件路径(hdfs的路径)则会采用hbase putdelete API进行写入。

Hbase  org.apache.hadoop.hbase.mapreduce.Import  <tablename>  hdfs://yun11.hdp.huayuntech.com:8020/hbase

  • 使用Import工具前必须先创建表

2Snapshot

  • 开启快照功能,在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层面不是基于hbaseputdeleteAPI进行的,不会写WAL日志。
  • 在创建snapshot后,可以通过ExportSnapshot工具把快照导出到另外一个集群,实现数据备份或者数据迁移,ExportSnapshot工具的用法如下:
  • 例如:

Hbase   org.apache.hadoop.hbase.snapshot.ExportSnapshot  -snapshot test4_snapshot_201411111422 -copy-to hdfs://yun11.hdp.huayuntech.com:8020 /apps/hbase/data

  • 保存到HSFS/apps/hbase/data这个指定的快照存储路径下hbase才能识别出这个快照
  • 执行该命令后,在yun11这个集群的hdfs中会把test4_snapshot_201411111422文件夹copy/apps/hbase/data /.hbase-snapshot文件下,进入yun11.hdp.huayuntech.com这个hbase集群,执行list_snapshots会看到有一个快照:test4_snapshot_201411111422,通过命令clone_snapshot可以把该快照copy成一个新的表,不用提前创建表,新表的region个数等信息完全与快照保持一致。
  • 在使用snapshot把一个集群的数据copy到新集群后,应用程序开启双写,然后可以使用Export工具把快照与双写之间的数据导入到新集群,从而实现数据迁移,为保障数据不丢失,Export导出时指定的时间范围可以适当放宽。

 

3Replication

  • 可以通过replication机制实现hbase集群的主从模式,具体步骤如下:

1  zookeeper不能被hbase托管,如果主从hbase集群共用一个zk集群,则zookeeper.znode.parent不能都是默认的hbase,可以配置为hbase-masterhbase-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'

  • ID是自己任意指定的数字,

CLUSTER_KEY为从集群的zookeeper下的一个Znode,

  • 例如:yun1,yun2,yun3:2181:/cluster1_hbase_replication

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,设定允许被备份

 

提示:

1 hbasereplication,如果是在建立主表和从表的关系前,主表已经有数据则该部分数据不会被同步到从表中,因为replication是依赖WAL日志进行的同步,可以通过如下步骤实现:

a)   通过snapshot把历史数据导入到从集群;

b)   开启replication

c)   通过Export工具把快照和开启replication之间的数据导入到从表;

d)   通过VerifyReplication工具校验数据的一致性。

2  如果客户端在写入数据时设置不写WAL日志,则会导致从集群不会同步数据;

3  主从同步是异步的,因此数据不一定会立即同步到从表;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值