公司datalink平台负责从各种数据源读取数据并同步到其他的同步或者异构数据源,最近增加的HBase的reader利用到了Hbase的Replication特性。

正常情况下,我们配置HBase的Replication需要在主集群上Hbase的shell里进行如下一系列的配置。

登录到HMaster节点,打开Hbase的shell命令行,我们进行如下步骤:

1、打开主节点里要参与复制的表的列族的复制特性。

disable 'order_detail'
alter 'order_detail', {NAME => 'basic_info',REPLICATION_SCOPE => '1'},{NAME => 'ext_info', REPLICATION_SCOPE => '1'}
enable 'order_detail' 

2、主节点里添加要复制的从节点的peer。

add_peer '2','10.102.22.33:2181:/hbase'

3、设置peer下的表、列族的复制关系。

set_peer_tableCFs '2','order_detail'

思考:

这些都是在Hbase的命令行里做的,我们的目标是通过管理平台能够做到更友好、更方便的管理,那有没有别的方式呢?

关于表的复制特性,我们建表的时候可以通过HBaseAdmin以代码的方式实现,即在建表时指定REPLICATION_SCOPE为1

其实在命令行建表最终也是通过HbaseAdmin实现的。

那显然在命令行中配置Replication一定也有对应的代码。通过翻阅代码和API我们找到了对应的实现类:ReplicationAdmin

ReplicationAdmin是集群副本操作的Admin工具类,主要职责是增加删除查询 peer操作和设置peer同步表元数据TableCFs。

下面看下ReplicationAdmin的API:

 

方法名
参数
返回值
注解
备注
ReplicationAdmin Configuration ReplicationAdmin 构造方法,参数Configuration为hbase集群链接配置信息
addPeer

String id

String clusterKey

void @Deprecated 已过期

添加副本集群的方法,参数解析

id:peer ID,在hbase集群中应唯一

clusterKey:副本集群,格式:zk_address:port:<zkHbaseParent>

addPeer

String id

String clusterKey

String tableCFs

void @Deprecated 已过期

添加副本集群的方法,参数解析

id:peer ID,在hbase集群中应唯一

clusterKey:副本集群,格式:zk_address:port:<zkHbaseParent>

tableCFs:需要同步的表-列簇,格式:table_a:f1;table_a:f2;table_b:f1;table_b:f2

addPeer

String id

ReplicationPeerConfig peerConfig

Map<TableName,? extends Collection<String>> tableCfs

void

添加副本集群的方法,参数解析

id: peer ID,在hbase集群中应唯一

peerConfig:副本集群配置封装,将副本集群地址封装到了peerConfig对象

tableCfs:需要同步的表-列簇,key 使用TableName对象表示,value使用 Collection<String> 实现类表示

removePeer String id void 删除指定id的副本集群
enablePeer String id void 使指定副本集群同步生效,生效后主集群才开始以rpc方式推送数据
disablePeer String id void 使指定副本集群同步失效
getPeersCount int 返回当前集群副本集群数量
listPeers Map<String,String> @Deprecated 已过期

返回当前集群副本集合

Key:peer ID

value:副本集群地址,格式:zk_address:port:<zkHbaseParent>

listPeerConfigs Map<String,ReplicationPeerConfig>

返回当前集群副本集合

Key:peer ID

value:ReplicationPeerConfig 副本封装对象,内部封装集群地址

getPeerConfig String id ReplicationPeerConfig 返回指定副本集群的集群信息
getPeerTableCFs String id String 返回指定副本集群的TableCFs信息,既所同步的表&表列簇。
setPeerTableCFs

String id

String tableCFs

void @Deprecated 已过期

设置指定副本集群,从主集群同步的表&表列簇。

tableCFs格式:table_a:f1;table_a:f2;table_b:f1;table_b:f2

setPeerTableCFs

String id

Map<TableName,? extends Collection<String>> tableCfs

void

设置指定副本集群,从主集群同步的表&表列簇。

tableCfs描述:需要同步的表-列簇,key 使用TableName对象表示,value使用 Collection<String> 实现类表示

getPeerState String id boolean 获取指定Peer副本集群的,有效状态,enable状态返回true,否则返回false
listReplicated List<HashMap<String,String>>

返回当前集群中,表-表列簇scope不为0的集合

key_1:"tableName" value_1:<tableName>

key_2:"columnFamlyName" value_2:<columnName>

key_3:"replicationType" value_3:<1>

enableTableRep final TableName tableName void

设置当前集群的指定表开启同步标记,既表的列簇全部设置scope为1;

该方法会查询peer列表中所有的集群,判断peer代表的副本集群是否拥有指定表,如果没有指定表,则从主集群复制表结构到该副本集群

disableTableRep final TableName tableName void 设置当前集群的指定表关闭同步标记,既标的列簇全部设置scope为0

使用案例

/**
* 该用例添加集群10.102.22.33:2181:/hbase_0.98为当前集群的副本集群,peer id为test_repl_01
*/
@Test
public void exampleAddPeer() {
try{
Configuration configuration = HBaseManager.getConfiguration("framework");//内部代码,获取配置
ReplicationAdmin replicationAdmin = new ReplicationAdmin(configuration);
ReplicationPeerConfig peerConfig = new ReplicationPeerConfig();
peerConfig.setClusterKey("10.102.22.33:2181:/hbase_0.98");
replicationAdmin.addPeer("test_repl_01",peerConfig,null);
} catch (IOException e) {
e.printStackTrace();
} catch (ReplicationException e) {
e.printStackTrace();
}
}

  

/**
* 这段代码表示副本集群peer:"test_repl_01" 需要同步表example_table_one的列簇f1,f2
* 设置后,只要主集群的example_table_one表的f1,f2列簇的scope为1,peer:"test_repl_01"代表的集群即可同步数据
*/
@Test
public void exampleSetPeer() {
try {
Configuration configuration = HBaseManager.getConfiguration("framework");//内部代码,获取配置
ReplicationAdmin replicationAdmin = new ReplicationAdmin(configuration);
Map<TableName,List<String>> cfs = new HashMap<TableName,List<String>>();
TableName tableName = TableName.valueOf("example_table_one");
//key:tableName,value list;表示 table<example_table_one> 的列簇f1,f2 需要同步
cfs.put(tableName,Arrays.asList("f1","f2"));
//test_repl_01 为副本集群的唯一id
replicationAdmin.setPeerTableCFs("test_repl_01",cfs);
} catch (IOException e) {
e.printStackTrace();
} catch (ReplicationException e) {
e.printStackTrace();
}
}
 

HBase0.98使用ReplicationAdmin管理集群同步的更多相关文章

  1. 第八章 搭建hadoop2.2.0集群,Zookeeper集群和hbase-0.98.0-hadoop2-bin.tar.gz集群

    安装配置jdk,SSH 一.首先,先搭建三台小集群,虚拟机的话,创建三个 下面为这三台机器分别分配IP地址及相应的角色:集群有个特点,三台机子用户名最好一致,要不你就创建一个组,把这些用户放到组里面去 ...

  2. Hadoop2.4.1 64-Bit QJM HA and YARN HA + Zookeeper-3.4.6 + Hbase-0.98.8-hadoop2-bin HA Install

    Hadoop2.4.1 64-Bit QJM HA and YARN HA Install + Zookeeper-3.4.6 + Hbase-0.98.8-hadoop2-bin HA(Hadoop ...

  3. 分布式Hbase-0.98.4在Hadoop-2.2.0集群上的部署

    fesh个人实践,欢迎经验交流!本文Blog地址:http://www.cnblogs.com/fesh/p/3898991.html Hbase 是Apache Hadoop的数据库,能够对大数据提 ...

  4. Hadoop2.7.3+spark2.1.0+hbase0.98分布式集群部署

    运行环境配置(10.79.115.111-114) 1.关闭防火墙与selinux 关闭防火墙: CentOS 7.x默认使用的是firewall作为防火墙. systemctl stop firew ...

  5. 基于HBase0.98.13搭建HBase HA分布式集群

    在hadoop2.6.0分布式集群上搭建hbase ha分布式集群.搭建hadoop2.6.0分布式集群,请参考“基于hadoop2.6.0搭建5个节点的分布式集群”.下面我们开始啦 1.规划 1.主 ...

  6. 分布式HBase-0.98.4环境搭建

    fesh个人实践,欢迎经验交流!Blog地址:http://www.cnblogs.com/fesh/p/3804072.html 本文有点简单,详细版本请参见<分布式Hbase-0.98.4在 ...

  7. Hadoop-2.6.0 + Zookeeper-3.4.6 + HBase-0.98.9-hadoop2环境搭建示例

    1    基本信息 1.1     软件信息 hadoop-2.6.0 zookeeper-3.4.6 hbase-0.98.9-hadoop2 (以下示例中使用的操作系统是Centos 6.5,请将 ...

  8. hbase-0.98.1-cdh5.1.0 完全分布式搭建

    cdh版与0.98版的配置一样 1.环境 master:c1 slave:c2,c3 CentOS 6.5 x64 ,hadoop-2.3.0-cdh5.1.0,zookeeper-3.4.5-cdh ...

  9. CDH版hbase-0.98.1单机安装

    HBase 的安装有两种方式:单机安装和分布式安装.HBase的单机安装了解即可,大家重点掌握HBase 分布式集群的安装.下面我们分别进行介绍. HBase 单机安装 HBase 需要运行在 Had ...

随机推荐

  1. MySQL分类表设计--根据ID删除全部子类

    在做数据库分类表的时候,通常会有这样的设计:一个字段是ID,另一个字段PID,PID指向自己的上级分类: 这样的设计带来的问题是:我要删除一个类,我希望它的子类全部一起删除: 在不知道分类有多少层级的 ...

  2. 2715:谁拿了最多奖学金-poj

    总时间限制:  1000ms 内存限制:  65536kB 描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成 ...

  3. PHP使用api的两种方法

    1.用file_get_contents()函数 $params = array('key' => '8d284859d04cfeeea6b0771f754adb49', 'location' ...

  4. Mysql--数据的操作

    1.插入数据 1.1 插入完整数据记录 语法1: 例子: 语法2: 例子: 1.2 插入数据记录一部分 语法: 例子: 1.3 插入多条数据记录 1.插入多条完整的数据 语法: 例子:   插入多条部 ...

  5. .bash_profile 加载

    1.Debian默认的shell是Bash, 1.1 命令行 和 ssh 登录 ,首先读入 /etc/profile,这是对所有用户都有效的配置:然后依次寻找下面三个文件,这是针对当前用户的配置. ~ ...

  6. 【Win 10 应用开发】将墨迹保存到图像的两种方法

    IT界最近这几年,各种乱七八糟的东西不断出现,其中能用在实际工作与生活中的,大概也就那么几个.Web 前端也冒出各种框架,这就为那些喜欢乱用框架的公司提供了很好的机会,于是造成很多项目体积越来越庞大, ...

  7. 乘积最大洛谷p1018

    题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...

  8. O(nlogn)算法,最长上升子序列,,非动规

    //最长上升子序列最快算法,非动态规划,运用了二分思想,还有栈的思想, //用每一个数去和栈中的栈顶元素相比较,如果大于栈顶元素,则入栈,否则运用二分查找,寻找出第一个比这个数大的那个数替换 #inc ...

  9. Elasticsearch中Head插件的使用

    在学习Elasticsearch的过程中,必不可少需要通过一些工具查看es的运行状态以及数据.如果都是通过rest请求,未免太过麻烦,而且也不够人性化.此时,head可以完美的帮助你快速学习和使用El ...

  10. HDU-1242-Rescu

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...