HBase复制
HBase复制是一种在不同HBase部署中复制数据的方法。它能够作为一种故障恢复的方法,并提供HBase层次的高可用性。在实际应用中,比如。能够将数据从一个面向页面的集群拷贝到一个MapReduce集群,后者能够同一时候处理新数据和历史数据。然后再自己主动将数据传回面向页面请求的集群。
HBase复制中最主要的架构模式是“主推送”(master-push),由于每一个region server都有自己的WAL(或HLog)。所以非常easy保存如今正在复制的位置。正如众所周知的解决方式-Mysql的主/从复制,仅仅使用二进制文件来跟踪改动。一个主集群能够将数据拷贝到随意数目的从集群,每一个region server都会參与复制自己的改动。很多其它的关于主/从复制或其它类型的复制,能够參考文章《How
Google Serves Data From Multiple Datacenters》。
复制是异步进行的,意味着集群能够是地理上彼此远离的,它们之间的连接能够在某个时刻断开,在主集群上的改动不能立即在从集群上进行同步(终于一致性)。
这里使用的复制格式从概念上和《MySQL’s statement-based replication》类似。
和SQL语句不同,全部的WALEdits(包含来自client的Put和Delete产生的多单元格操作)都会被复制以保证原子性。
来自每一个region server的HLog是HBase复制的基础。而且仅仅要它们须要将数据拷贝到从集群,它们就必须被保存到HDFS上。每一个region server从它须要的最老的日志開始复制。同一时候在zookeeper中保存当前恢复的位置来简化错误恢复。每一个从集群恢复的位置可能不同。但它们处理的HLog队列内容是同样的。
參与复制的集群的规模能够不正确等。
主集群会通过随机分配尽量均衡从集群的负载。
从0.92版本号起,HBase还支持另外的两种模式的复制:主<->主和循环复制。
下图展示了复制的工作流程和架构。
集群复制架构图
HBase复制部署
1)编辑集群中全部机器的${HBASE_HOME}/conf/hbase-site.xml文件,添加例如以下配置:
<property>
<name>hbase.replication</name>
<value>true</value>
</property>
改动完毕后,重新启动HBase集群。使配置生效。
2)在HBase shell中执行例如以下命令:
hbase(main):003:0> add_peer 'ID' 'CLUSTER_KEY'
hbase(main):004:0> start_replication
第一条命令是为从集群设置zookeeper集群信息,这样能够使得改动被同步到从集群上。第二条命令真正将改动过的记录公布到从集群上。为了保证工作能依照预期进行,用户必须保证已经在从集群上建立了一个同样的表的副本,表能够为空。但必须有同样的模式和表名。
注意:hbase-0.96和hbase-0.98已经没有了start_replication命令和stop_replication命令。hbase-0.98相较hbase-0.96,新增了set_peer_tableCFs、show_peer_tableCFs命令。在设定复制时,hbase-0.98须要使用set_peer_tableCFs设置。详细的有相应的帮助命令可供參考。
ID必须是一个短整数。CLUSTER_KEY的内容请參考下面模板:
hbase.zookeeper.quorum:hbase.zookeeper.property.clientPort:zookeeper.znode.parent
比方,zk.server.com:2181:/hbase
注意:假设两个集群使用同样的zookeeper集群。你不得不使用不同的 zookeeper.znode.parent,由于它们不能写入同样的目录中。
3)一旦你有一个对等(从)集群。你须要在你的列簇上使复制可用,要想达到这种效果,能够在HBase shell中运行例如以下命令:
hbase(main):005:0> disable 'your_table'
hbase(main):006:0> alter 'your_table', {NAME => 'family_name', REPLICATION_SCOPE => '1'}
hbase(main):007:0> enable 'your_table'
scope值为0(默认值)意味着它不会被复制。而scope值为1意味着它将被复制。
4)执行例如以下命令能够列出全部配置的对等(从)集群:
hbase(main):008:0> list_peers
5)执行例如以下命令将使对等(从)集群不可用:
hbase(main):009:0> disable_peer 'ID'
执行完命令后,HBase将停止将向对等(从)集群发送改动,可是它将一直跟踪全部新的WALs文件。以便当从集群可用时继续复制。
6)能够执行例如以下命令将使之前设置为不可用的对等(从)集群可用:
hbase(main):010:0> enable_peer 'ID'
7)执行以下的命令,能够移除一个从集群:
hbase(main):011:0> stop_replication
hbase(main):012:0> remove_peer 'ID'
须要注意的是。停止复制仍会完毕全部已在队列里的改动的复制。可是之后全部的处理都被停止了。为了确认你的配置都正常工作,你能够查看不论什么一个region server的日志文件。看是否有类似以下几行的内容:
Considering 1 rs, with ratio 0.1
Getting 1 rs from peer cluster # 0
Choosing peer 10.10.1.49:62020
这个样例表示有一个region server被选择做复制。
和复制有关的其它一些配置项:
<property>
<name>replication.source.nb.capacity</name>
<value>5000</value>
<description> 主集群每次像备集群发送的entry最大的个数,推荐5000.可依据集群规模做出适当调整,slave集群服务器假设较多,可适当增大,默认是25000</description>
</property> <property>
<name>replication.source.size.capacity</name>
<value>4194304</value>
<description> 主集群每次像备集群发送的entry的包的最大值大小,不推荐过大,默认是64MB(64*1024*1024)</description>
</property> <property>
<name>replication.source.ratio</name>
<value>1</value>
<description> 主集群里使用slave服务器的百分比。默认是0.1</description>
</property> <property>
<name>hbase.regionserver.wal.enablecompression</name>
<value>false</value>
<description> 主集群关闭hlog的压缩</description>
</property> <property>
<name> replication.sleep.before.failover</name>
<value>5000</value>
<description> 主集群在regionserver当机后几毫秒開始运行failover</description>
</property>
转载请注明出处:http://blog.csdn.net/iAm333
HBase复制的更多相关文章
- HBase中的备份和故障恢复方法
本文将对Apache HBase可用的数据备份机制和大量数据的故障恢复/容灾机制做简要介绍. 随着HBase在重要的商业系统中应用的大量添加,很多企业须要通过对它们的HBase集群建立健壮的备份和故障 ...
- flume 自己定义 hbase sink 类
參考(向原作者致敬) http://ydt619.blog.51cto.com/316163/1230586 https://blogs.apache.org/flume/entry/streamin ...
- HBASE完全分布式模式的安装
1集群环境下hadoop.1.1.2已经安装成功 2配置hosts,及环境变量 3编辑hbase-env.xml 4编辑hbase-site.xml 5编辑regionservers文件 6把Hbas ...
- HBase系列文章汇总
本文整理汇总了本博客自去年学习HBase以来写的全部关于HBase的相关内容.持续更新中,很多其它内容.敬请关注! 相关知识: 1.<布隆过滤器(Bloom Filter)> 2.< ...
- HBase数据备份及恢复(导入导出)的常用方法
一.说明 随着HBase在重要的商业系统中应用的大量增加,许多企业需要通过对它们的HBase集群建立健壮的备份和故障恢复机制来保证它们的企业(数据)资产.备份Hbase时的难点是其待备份的数据集可能非 ...
- 第五章:大数据 の HBase 进阶
本课主题 HBase 读写数据的流程 HBase 性能优化和最住实践 HBase 管理和集群操作 HBase 备份和复制 引言 前一篇 HBase 基础 (HBase 基础) 简单介绍了NoSQL是什 ...
- HBase的replication原理及部署
一.hbase replication原理 hbase 的复制方式是 master-push 方式,即主集群推的方式,主要是因为每个rs都有自己的WAL. 一个master集群可以复制给多个从集群,复 ...
- 1、搭建HBase完全分布式集群
搭建完全分布式集群 HBase集群建立在hadoop集群基础之上,所以在搭建HBase集群之前需要把Hadoop集群搭建起来,并且要考虑二者的兼容性.现在就以5台机器为例,搭建一个简单的集群. 软件版 ...
- Hbase分布式安装部署过程
系统 Red hat linux 6.4 Hadoop版本 1.2.1 Hbase版本 0.94.16 Hbase的完全分布式安装概述: 1. 配置hosts,确保涉及的主机名均可解析为ip 2. 编 ...
随机推荐
- PHP函数之类
if(isset($_POST['dosubmit'])) { } 打散 $array_urls = explode("\r\n",$inurl_str); foreach ($a ...
- ORACLE 11G在存储过程里面遍历游标, 调用job任务定时运行
ORACLE存储过程里游标遍历.调用job定时运行 1,第一种使用For 循环 for循环是比較简单有用的方法. 首先.它会自己主动open和close游标.攻克了你忘记打开或关闭游标的烦恼. 其次, ...
- JNI-获取Java对象的成员变量-GeInttField()
例: 在Java中定义一个属性,然后用C语言将其设置成另外的值,并输出出来. Java代码: Person.java package com.yuneec.demo; public class Per ...
- F1 P R的理解
F1 P R的理解 precision:查准率 recall:查全率,召回率 查准率,基于预测的结果,预测为正的样本中 由多少真正的正样本.即,真正为正的越多越好. 查全率,针对原来的正样本,有多少正 ...
- Python 2.7.9 Demo - 015.元组的定义、取值、遍历
#coding=utf-8 #!/usr/bin/python final_list = ('a', 1, 'b', 2, 'c', 3); print final_list[0]; print fi ...
- Oracle PLSQL Demo - 24.分隔字符串function
-- refer: -- http://www.cnblogs.com/gnielee/archive/2009/09/09/1563154.html -- http://www.cnblogs.co ...
- electron-vue 项目搭建的地址
https://simulatedgreg.gitbooks.io/electron-vue/content/en/ 现在的网址:vue的electron的文件: https://github.com ...
- shell学习笔记之条件(二)
test或者[ #检查文件是否存在 if test -f read.c then ... fi if [ -f read.c ] then ... fi #如果then和if在同一行上,就应该用;把i ...
- Celery+python+redis异步执行定时任务
我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会 ...
- python AES 加密
pad: ZeroPadding mode: cbc #!/usr/bin/env python# -*- coding:utf-8 -*-# 这里使用pycrypto库# 按照方法:easy_in ...