HBase0.98使用ReplicationAdmin管理集群同步
公司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管理集群同步的更多相关文章
- 第八章 搭建hadoop2.2.0集群,Zookeeper集群和hbase-0.98.0-hadoop2-bin.tar.gz集群
安装配置jdk,SSH 一.首先,先搭建三台小集群,虚拟机的话,创建三个 下面为这三台机器分别分配IP地址及相应的角色:集群有个特点,三台机子用户名最好一致,要不你就创建一个组,把这些用户放到组里面去 ...
- 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 ...
- 分布式Hbase-0.98.4在Hadoop-2.2.0集群上的部署
fesh个人实践,欢迎经验交流!本文Blog地址:http://www.cnblogs.com/fesh/p/3898991.html Hbase 是Apache Hadoop的数据库,能够对大数据提 ...
- Hadoop2.7.3+spark2.1.0+hbase0.98分布式集群部署
运行环境配置(10.79.115.111-114) 1.关闭防火墙与selinux 关闭防火墙: CentOS 7.x默认使用的是firewall作为防火墙. systemctl stop firew ...
- 基于HBase0.98.13搭建HBase HA分布式集群
在hadoop2.6.0分布式集群上搭建hbase ha分布式集群.搭建hadoop2.6.0分布式集群,请参考“基于hadoop2.6.0搭建5个节点的分布式集群”.下面我们开始啦 1.规划 1.主 ...
- 分布式HBase-0.98.4环境搭建
fesh个人实践,欢迎经验交流!Blog地址:http://www.cnblogs.com/fesh/p/3804072.html 本文有点简单,详细版本请参见<分布式Hbase-0.98.4在 ...
- 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,请将 ...
- 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 ...
- CDH版hbase-0.98.1单机安装
HBase 的安装有两种方式:单机安装和分布式安装.HBase的单机安装了解即可,大家重点掌握HBase 分布式集群的安装.下面我们分别进行介绍. HBase 单机安装 HBase 需要运行在 Had ...
随机推荐
- PHP秒杀系统-高并发高性能的极致挑战
慕课网实战教程后端:1.java c++算法与数据结构2.java Spring Boot带前后端 渐进式开发企业级博客系统3.java Spring Boot企业微信点餐系统4.java Sprin ...
- 虚拟机创建流程中neutron代码分析(二)
前言: 当nova服务发送了创建port的restful调用信息之后,在neutron服务中有相应的处理函数来处理调用.根据restful的工作原理,是按照 paste.ini文件中配置好的流程去处理 ...
- warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
------问题-------------------- Qt项目使用 VC++ 编译器出现此错误. warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 ...
- 来个Button看一看
0.目录 1.前言 2.基本属性与方法 3.点点更健康 4.我的Button有点多 5.震惊!TextView竟然... 1.前言 每次写代码总会忘记一些东西,又要重新Goooooooooogle,好 ...
- Date( )方法 章节中,你可以查看更多关于日期转换为字符串的函数
在 Date 方法 章节中,你可以查看更多关于日期转换为字符串的函数: 方法 描述 getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31). getDay() 从 Date 对象 ...
- maven项目对于测试时“无法加载主类”的解决方案
1.右键maven项目,选择 build path --------->Configure Build Path ,执行下列操作,保存即可.
- 一键架设FastDFS分布式文件系统脚本,基于Centos6
一.使用背景 业务驱动技术需要,原来使用 FTP和 Tomcat upload目录的缺陷日渐严重,受限于业务不断扩大,想使用自动化构建,自动化部署,Zookeeper中心化,分布式RPC DUBBO等 ...
- 阿里云服务器部署php的laravel项目,在阿里云买ECS 搭建 Linux+Nginx+Mysql+PHP环境的
在阿里云买ECS的时候选择自己习惯的镜像系统,我一般都是使用Linux Ubuntu,所以,以下的配置都是在Ubuntu 14.04稳定支持版的环境中搭建Linux+Nginx+Mysql+PHP环境 ...
- Python 日期和时间操作
Python提供了一个time 和calendar模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. 每个时间戳都是以自从1970年1月1日午夜(历元)经过了多长时间来表示. Pytho ...
- lua游戏开发实践指南学习笔记1
本文是依据lua游戏开发实践指南做的一些学习笔记,仅用于继续自己学习的一些知识. Lua基础 1. 语言定义: 在lua语言中,标识符有非常大的灵活性(变量和函数名),只是用户不呢个以数字作为起始符 ...