hbase笔记---新版api之对表的操作,指定region创建,普通创建,删除,修改列族信息
hbase 对于表的相关操作:
实现功能有:指定region创建,普通创建,删除,修改列族信息
package learm.forclass.testclass;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
/**
* Created by zhoujun on 2017/9/21.
* 实验 二
*/
public class MainHT {
/**
* 连接配置信息
*/
private static Configuration conf = null;
/**
* 情态代码块,初始化配置信息,static 中的代码会在 main 方法调用之前执行
*/
static {
conf = HBaseConfiguration.create();// 初始化配置信息
// conf.set("hbase.zookeeper.quorum","192.168.23.128"); //设置zookeeper集群
// conf.set("hbase.zookeeper.property.clientPort", "2181"); //设置zookeeper的端口
// conf.set("hbase.rootdir", "hdfs://192.168.23.128"
// + ":9000/hbase"); // 设置 hbase 的 master 集群地址
}
public static void main(String[] args) throws InterruptedException {
log("************** 主方法调试 ******************");
// 列出数据库中所有的表
listTables();
// 创建一个表,包含五个分区,两个列族
createTableThroughRegion(TableName.valueOf("testRegion"), new String[]{"cf1","cf2"},
new String[]{"10|", "20|", "30|", "40|", "50|"});
// 删除表中的一个列族
deleteAFamily(TableName.valueOf("testRegion"), "cf1");
// 列出数据库中所有的表
log("删除一个列族后的表结构:");
listTables();
// 创建表
log("创建几个测试使用的表");
creatTable("t1", new String[]{"tc1"});
creatTable("t2", new String[]{"tc1", "tc2"});
creatTable("test3", new String[]{"tc1"});
creatTable("test4", new String[]{"tc1", "tc2"});
// 列出数据库中所有的表
log("创建之后的数据库中的表为:");
listTables();
log("******************************************");
log("************** 删除一张表 t2 ************");
// 列出数据库中所有的表
log("删除之前数据库中的表有:");
listTables();
// 删除 t2 这张表
deleteTable("t1");
log("删除之后数据库中的表有:");
listTables(); // 列出数据库中所有的表
Thread.sleep(1000);
log("******************************************");
log("************** 删除所有表 ****************");
// 列出数据库中所有的表
log("全部删除之前数据库中的表有:");
listTables();
// 全部删除
deleteAllTable();
log("全部删除之后数据库中的表有:");
listTables();
Thread.sleep(1000);
log("******************************************");
}
/**
* 根据指定的表名和列族列表,创建一张表
* @param tableName 创建的表名
* @param family 创建的列族数组
*/
public static void creatTable(String tableName, String[] family){
Admin admin = null;
try {
/** 获取连接接口*/
Connection connection = ConnectionFactory.createConnection(conf);
/** 获取 Admin*/
admin = connection.getAdmin();
/** 创建 hbase table 详细描述类,添加表的列族,版本等信息*/
HTableDescriptor ts = new HTableDescriptor(TableName.valueOf(tableName));
for(String f : family) ts.addFamily(new HColumnDescriptor(f));
/** 创建表 */
admin.createTable(ts);
if(admin.tableExists(TableName.valueOf(tableName))){
log("创建表:" + tableName + " 成功 !");
log("列族伪: " );
for(String f : family) log("---" + f);
}
}catch(IOException ioe){
log("******************创建表失败");
ioe.printStackTrace();
}finally {
try{
assert admin != null;
admin.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
/**
* 指定表名,删除一张表
* @param tableName 删除表的表名
*/
public static void deleteTable(String tableName){
Admin admin2 = null;
try {
Connection connection = ConnectionFactory.createConnection(conf);
admin2 = connection.getAdmin();
if(admin2.tableExists(TableName.valueOf(tableName))){
admin2.disableTable(TableName.valueOf(tableName));
if(!admin2.isTableEnabled(TableName.valueOf(tableName))){
admin2.deleteTable(TableName.valueOf(tableName));
log("删除表 " + tableName + " 成功!");
}else{
log("表不存在 !");
}
}
}catch(IOException ioe){
ioe.printStackTrace();
}finally {
try{
assert admin2 != null;
admin2.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
/**
* 删除数据库中的所有表
*/
public static void deleteAllTable(){
Admin admin3 = null;
try {
Connection connection = ConnectionFactory.createConnection(conf);
admin3 = connection.getAdmin();
TableName[] tableNamess = admin3.listTableNames();
log("开始删除:");
for(TableName tableName: tableNamess){
if(admin3.tableExists(tableName)){
admin3.disableTable(tableName);
if(!admin3.isTableEnabled(tableName)){
admin3.deleteTable(tableName);
log("删除表 " + tableName + " 成功!");
}else{
log("*********** 表不可使用 !");
}
}else log("表不存在 !");
}
}catch(IOException ioe){
ioe.printStackTrace();
}finally {
try{
assert admin3 != null;
admin3.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
/**
* 列出所有的表名,列族
*/
public static void listTables(){
Admin admin3 = null;
try {
Connection connection = ConnectionFactory.createConnection(conf);
admin3 = connection.getAdmin();
TableName[] tableNamess = admin3.listTableNames();
log("现在数据库有的表:");
log("************************");
for(TableName tableName: tableNamess){
HTableDescriptor hTableDescriptor = admin3.getTableDescriptor(tableName);
log("*********");
log("***表名: " + tableName);
log("***列族:");
for(HColumnDescriptor hcp : hTableDescriptor.getFamilies()){
log(" " + hcp.getNameAsString());
}
log("*********");
}
log("************************");
}catch (Exception e){
e.printStackTrace();
}finally{
try {
assert admin3 != null;
admin3.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 创建有 region 分区的表
* @param tableName 表名
* @param family 列族数组
* @param regions 分区的数组,exp: new String[]{"10|", "20|", "30|", "40|", "50|"}
*/
public static void createTableThroughRegion(TableName tableName, String[] family, String[] regions){
Admin admin = null;
try {
Connection connection = ConnectionFactory.createConnection(conf);
admin = connection.getAdmin();
HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
for(String f: family){
hTableDescriptor.addFamily(new HColumnDescriptor(f));
}
byte[][] splitKeys = new byte[regions.length][];
/**
* 根据传入的 region 数组直接创建
*/
for (int i = 0; i < regions.length; i++) {
splitKeys[i] = Bytes.toBytes(regions[i]);
}
// /**
// * 给指定的 region 分区,根据其 hashCode 升序排序
// */
// TreeSet<byte[]> rows = new TreeSet<byte[]>(Bytes.BYTES_COMPARATOR);
// for (int i = 0; i < regions.length; i++) rows.add(Bytes.toBytes(regions[i]));
// Iterator<byte[]> rowKeyIter = rows.iterator();
// int i = 0;
// while (rowKeyIter.hasNext()) {
// byte[] tempRow = rowKeyIter.next();
// rowKeyIter.remove();
// splitKeys[i] = tempRow;
// i++;
// }
//创建
admin.createTable(hTableDescriptor, splitKeys);
}catch (Exception e){
e.printStackTrace();
}finally {
try{
assert admin != null;
admin.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
/**
* 删除指定表的一个列族
* @param tableName 表名
* @param deleteFamily 要删除列族的列族名
*/
public static void deleteAFamily(TableName tableName, String deleteFamily){
Admin admin = null;
try {
Connection connection = ConnectionFactory.createConnection(conf);
admin = connection.getAdmin();
if(!admin.tableExists(tableName)) throw new Exception("所要删除的表不存在");
if(admin.isTableEnabled(tableName)){
admin.disableTable(tableName);
log("disable table");
admin.deleteColumn(tableName, Bytes.toBytes(deleteFamily));
admin.enableTable(tableName);
log("enable table");
}else {
log("delete deleteFamily !");
admin.deleteColumn(tableName, Bytes.toBytes(deleteFamily));
admin.enableTable(tableName);
log("enable table !");
}
}catch (Exception e){
e.printStackTrace();
}finally{
try {
assert admin != null;
admin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 内部工具类,打印日志信息
* @param msg 日志信息
*/
private static void log(Object msg){
System.out.println("info: " + msg);
}
}
hbase笔记---新版api之对表的操作,指定region创建,普通创建,删除,修改列族信息的更多相关文章
- HBase学习笔记——Java API操作
1.1. 配置 HBaseConfiguration 包:org.apache.hadoop.hbase.HBaseConfiguration 作用:通过此类可以对HBase进行配置 用法实例: C ...
- HBase笔记:对HBase原理的简单理解
早些时候学习hadoop的技术,我一直对里面两项技术倍感困惑,一个是zookeeper,一个就是Hbase了.现在有机会专职做大数据相关的项目,终于看到了HBase实战的项目,也因此有机会搞懂Hbas ...
- HBase 笔记3
数据模型 Namespace 表命名空间: 多个表分到一个组进行统一的管理,需要用到表命名空间 表命名空间主要是对表分组,对不同组进行不同环境设定,如配额管理 安全管理 保留表空间: HBase中有 ...
- 5 hbase-shell + hbase的java api
本博文的主要内容有 .HBase的单机模式(1节点)安装 .HBase的单机模式(1节点)的启动 .HBase的伪分布模式(1节点)安装 .HBase的伪分布模式(1节点)的启动 .HBase ...
- Hbase笔记3 shell命令
http://www.jb51.net/article/31172.htm 这个文章写得挺好 1.HBase的shell就和我们用Mysql的终端是一个意思,比如我们安装好Mysql,配置好了环境变量 ...
- hbase-shell + hbase的java api
本博文的主要内容有 .HBase的单机模式(1节点)安装 .HBase的单机模式(1节点)的启动 .HBase的伪分布模式(1节点)安装 .HBase的伪分布模式(1节点)的启动 .HBas ...
- HBase的java客户端测试(一)---DDL操作
测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node " ...
- HBase 笔记2
Hadoop 服务启动顺序: zookeeper ->journalnode->namenode -> zkfc -> datanode HBase Master WEB控制台 ...
- HBase学习记录-API
delete.addColumns()和delete.addColumn()的区别 /** * delete.addColumns(); * delete.addColumn(); * 区别: * a ...
随机推荐
- C++模板元编程----堆排序
目录 目录 前言 实现的一些小细节 Debug 惰性求值 总结 Ref 前言 经过前两次经验的积累,终于来到了麻烦的堆排序.在一开始接触模板元编程的时候,我就期望有一天能够写出元编程堆排序的代码.原因 ...
- [ABP教程]第七章 作者:数据库集成
Web开发教程7 作者:数据库集成 关于此教程 在这个教程系列中,你将要构建一个基于ABP框架的应用程序 Acme.BookStore.这个应用程序被用于甘丽图书页面机器作者.它将用以下开发技术: E ...
- 记一次多事件绑定中自己给自己设置的坑——click,dblclick,mousedown,mousemove,mouseup
目录 项目综述 需求 问题 猜想 解决 反思 项目综述 在页面中模拟某操作系统的操作界面,提供应用窗口的最大化.最小化.还原等功能 需求 对一个应用窗口标题栏双击使其铺满整个视口,再次双击还原到原来大 ...
- mysql高并发解决方案
mysql高并发的解决方法有: 优化SQL语句,优化数据库字段,加缓存,分区表,读写分离以及垂直拆分,解耦模块,水平切分等. 高并发大多的瓶颈在后台,在存储mysql的正常的优化方案如下: (1)代码 ...
- Java内存模型与线程(二)线程的实现和线程的调度
先行先发生原则(happen-before原则) 先行先发生是指Java内存模型中定义的两项操作之间的偏序关系. 如果说A先行于B,其实就是说在发生B操作之前,操作A产生的影响能被操作B观察到,至于这 ...
- spring中的工厂模式
spring的bean的创建原理就是框架利用反射创建出实例对象 工厂模式:工厂帮我们创建对象:有一个专门帮我们创建对象的类,我们把这个类叫做工厂类. 例如:Plane plane = PlaneFac ...
- CodeMonke少儿编程第1章 step与turn
第1章 step与turn 目标 了解游戏舞台的各组成部分 掌握step和turn指令的用法 说起计算机,对于不了解它的人来说,也许会感到有些神秘,其实不然,它不过是能够接收指令并且按照指令执行的一种 ...
- ftp交互和控制命令总结
一.FTP管理: 基于tcp,首先有客户端相服务端的知名端口21发起tcp连接建立ftp控制连接,控制连接在整个会话期间都保持打开,只用来发送连接/传送请求. 这里分为两种模式: 主动模式(PORT) ...
- Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" and "journalctl -xe" for details. To force a start use "systemctl reset-failed
安装docker时,自己添加了国内的hub.docker.com镜像 [root@ce-docker ~]# systemctl restart docker 出现以下报错:Job for docke ...
- [APUE] 文件 I/O
文件操作相关 API:open, read, write, lseek, close. 多进程共享文件的相关 API:dup, dup2, fcntl, sync, fsync, ioctl. 文件操 ...