HBase详解(04) - HBase Java API使用
HBase详解(04) - HBase Java API使用
环境准备
新建Maven项目,在pom.xml中添加依赖
|
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>2.0.5</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>2.0.5</version> </dependency> |
DDL 库表的操作
- 创建HBase_DDL类
package com.zhangjk.HBase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
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.junit.Test;
import java.io.IOException;
public
class HBase_DDL {
}
- 判断表是否存在
//判断表是否存在
public
static
boolean isTableExist(String tableName)
throws IOException {
//1.创建配置信息并配置
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum",
"hadoop102,hadoop103,hadoop104");
//2.获取与HBase的连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取DDL操作对象
Admin admin = connection.getAdmin();
//4.判断表是否存在操作
boolean exists = admin.tableExists(TableName.valueOf(tableName));
//5.关闭连接
admin.close();
connection.close();
//6.返回结果
return exists;
}
@Test
public
void isTableExist()
throws IOException {
boolean b = isTableExist("student");
System.out.println(b);
}
- 创建表
//创建表
public
static
void createTable(String tableName, String... cfs)
throws IOException {
//1.判断是否存在列族信息
if
(cfs.length <=
0)
{
System.out.println("请设置列族信息!");
return;
}
//2.判断表是否存在
if
(isTableExist(tableName))
{
System.out.println("需要创建的表已存在!");
return;
}
//3.创建配置信息并配置
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum",
"hadoop102,hadoop103,hadoop104");
//4.获取与HBase的连接
Connection connection = ConnectionFactory.createConnection(configuration);
//5.获取DDL操作对象
Admin admin = connection.getAdmin();
//6.创建表描述器构造器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
//7.循环添加列族信息
for
(String cf : cfs)
{
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(cf));
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
}
//8.执行创建表的操作
admin.createTable(tableDescriptorBuilder.build());
//9.关闭资源
admin.close();
connection.close();
}
@Test
public
void createTable()
throws IOException {
createTable("student1","info1",
"info2");
}
- 删除表
//删除表
public
static
void dropTable(String tableName)
throws IOException {
//1.判断表是否存在
if
(!isTableExist(tableName))
{
System.out.println("需要删除的表不存在!");
return;
}
//2.创建配置信息并配置
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum",
"hadoop102,hadoop103,hadoop104");
//3.获取与HBase的连接
Connection connection = ConnectionFactory.createConnection(configuration);
//4.获取DDL操作对象
Admin admin = connection.getAdmin();
//5.使表下线
TableName name = TableName.valueOf(tableName);
admin.disableTable(name);
//6.执行删除表操作
admin.deleteTable(name);
//7.关闭资源
admin.close();
connection.close();
}
@Test
public
void dropTable()
throws IOException {
dropTable("student1");
}
- 创建命名空间
//创建命名空间
public
static
void createNameSpace(String ns)
throws IOException {
//1.创建配置信息并配置
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum",
"hadoop102,hadoop103,hadoop104");
//2.获取与HBase的连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取DDL操作对象
Admin admin = connection.getAdmin();
//4.创建命名空间描述器
NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(ns).build();
//5.执行创建命名空间操作
try
{
admin.createNamespace(namespaceDescriptor);
}
catch
(NamespaceExistException e)
{
System.out.println("命名空间已存在!");
}
catch
(Exception e)
{
e.printStackTrace();
}
//6.关闭连接
admin.close();
connection.close();
}
@Test
public
void createNameSpace()
throws IOException {
createNameSpace("test1");
}
DML 增删改查
- 创建类HBase_DML
- 插入数据
//插入数据
//tableName 表名
//rowKey 主键
//cf 列族名
//字段名称
//需要添加到值
public
static
void putData(String tableName, String rowKey, String cf, String cn, String value)
throws IOException {
//1.获取配置信息并设置连接参数
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum",
"hadoop102,hadoop103,hadoop104");
//2.获取连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取表的连接
Table table = connection.getTable(TableName.valueOf(tableName));
//4.创建Put对象
Put put =
new Put(Bytes.toBytes(rowKey));
//5.放入数据
put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn), Bytes.toBytes(value));
//6.执行插入数据操作
table.put(put);
//7.关闭连接
table.close();
connection.close();
}
@Test
public
void putData()
throws IOException {
String tableName =
"student1";
String rowKey =
"001";
String cf =
"info1";
String cn =
"name";
String value =
"zhangshan";
putData(tableName, rowKey, cf, cn, value);
}
- 单条数据查询(GET)
//单条数据查询(GET)
public
static
void getDate(String tableName, String rowKey, String cf, String cn)
throws IOException {
//1.获取配置信息并设置连接参数
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum",
"hadoop102,hadoop103,hadoop104");
//2.获取连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取表的连接
Table table = connection.getTable(TableName.valueOf(tableName));
//4.创建Get对象
Get get =
new Get(Bytes.toBytes(rowKey));
// 指定列族查询
// get.addFamily(Bytes.toBytes(cf));
// 指定列族:列查询
// get.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn));
//5.查询数据
Result result = table.get(get);
//6.解析result
for
(Cell cell : result.rawCells())
{
System.out.println("ROW:"
+ Bytes.toString(CellUtil.cloneRow(cell))
+
" CF:"
+ Bytes.toString(CellUtil.cloneFamily(cell))
+
" CL:"
+ Bytes.toString(CellUtil.cloneQualifier(cell))
+
" VALUE:"
+ Bytes.toString(CellUtil.cloneValue(cell)));
}
//7.关闭连接
table.close();
connection.close();
}
@Test
public
void getDate()
throws IOException {
String tableName =
"student1";
String rowKey =
"001";
String cf =
"info1";
String cn =
"name";
getDate(tableName, rowKey, cf, cn);
}
- 扫描数据(Scan)
//扫描数据(Scan)
public
static
void scanTable(String tableName)
throws IOException {
//1.获取配置信息并设置连接参数
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum",
"hadoop102,hadoop103,hadoop104");
//2.获取连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取表的连接
Table table = connection.getTable(TableName.valueOf(tableName));
//4.创建Scan对象
Scan scan =
new Scan();
//5.扫描数据
ResultScanner results = table.getScanner(scan);
//6.解析results
for
(Result result : results)
{
for
(Cell cell : result.rawCells())
{
System.out.println(
Bytes.toString(CellUtil.cloneRow(cell))+":"+
Bytes.toString(CellUtil.cloneFamily(cell))+":"
+
Bytes.toString(CellUtil.cloneQualifier(cell))
+":"
+
Bytes.toString(CellUtil.cloneValue(cell))
);
}
}
//7.关闭资源
table.close();
connection.close();
}
@Test
public
void scanTable()
throws IOException {
scanTable("student1");
}
- 删除数据
//删除数据
public
static
void deletaData(String tableName, String rowKey, String cf, String cn)
throws IOException {
//1.获取配置信息并设置连接参数
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum",
"hadoop102,hadoop103,hadoop104");
//2.获取连接
Connection connection = ConnectionFactory.createConnection(configuration);
//3.获取表的连接
Table table = connection.getTable(TableName.valueOf(tableName));
//4.创建Delete对象
Delete delete =
new Delete(Bytes.toBytes(rowKey));
// 指定列族删除数据
// delete.addFamily(Bytes.toBytes(cf));
// 指定列族:列删除数据(所有版本)
// delete.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn));
// 指定列族:列删除数据(指定版本)
// delete.addColumns(Bytes.toBytes(cf), Bytes.toBytes(cn));
//5.执行删除数据操作
table.delete(delete);
//6.关闭资源
table.close();
connection.close();
}
@Test
public
void deletaData()
throws IOException {
String tableName =
"student1";
String rowKey =
"001";
String cf =
"info1";
String cn =
"name";
deletaData(tableName, rowKey, cf, cn);
}
HBase详解(04) - HBase Java API使用的更多相关文章
- HBase详解(05) - HBase优化 整合Phoenix 集成Hive
HBase详解(05) - HBase优化 整合Phoenix 集成Hive HBase优化 预分区 每一个region维护着startRow与endRowKey,如果加入的数据符合某个region维 ...
- kafka详解(03) - kafka JAVA API
kafka详解(03) - kafka JAVA API Producer (生产者)API 消息发送流程 Kafka的Producer发送消息采用的是异步发送的方式.在消息发送的过程中,涉及到了两个 ...
- HBase详解(01) - Hbase简介
HBase简介 定义:HBase是一种分布式.可扩展.支持海量数据存储的NoSQL数据库. 数据模型:逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列.但从HBase的底 ...
- HBase详解(03) - HBase架构和数据读写流程
RegionServer 架构 每个RegionServer可以服务于多个Region 每个RegionServer中有多个Store, 1个WAL和1个BlockCache 每个Store对应一个列 ...
- [转帖]HBase详解(很全面)
HBase详解(很全面) very long story 简单看了一遍 很多不明白的地方.. 2018-06-08 16:12:32 卢子墨 阅读数 34857更多 分类专栏: HBase [转自 ...
- 图解大数据 | 海量数据库查询-Hive与HBase详解
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-det ...
- HBase详解(02) - HBase-2.0.5安装
HBase详解(02) - HBase-2.0.5安装 HBase安装环境准备 Zookeeper安装 Zookeeper安装参考<Zookeeper详解(02) - zookeeper安装部署 ...
- Java网络编程和NIO详解开篇:Java网络编程基础
Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...
- Hadoop详解(04)-Hdfs
Hadoop详解(04)-Hdfs HDFS概述 HDFS产出背景及定义 背景:随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需 ...
随机推荐
- ABC260 作战总结
ABC260 作战总结 今后开始写一些模拟赛外的其他比赛的总结(也许有题解?). 开场点到另一场\(\text{ARC}\)去了,耽误了点时间,切完前四题发现已经过了\(37\)分钟了,看来自己读题+ ...
- Hbase之shell基本操作
一.系统命令 启动hbase Shell ./bin/hbase shell 获取帮助 help 查询服务器状态 status 查询hbase版本 version 查询表 list 获取表描述 des ...
- 已知数据库中存在表tb_book2,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中。需要对提交的信息进行修改,信息填入不能为空,为空则则有提示。
jsp结合SQLSERVER向数据库中的表添加图书信息. 已知数据库中存在表tb_book2,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中.需要对提交的信息进行修改,信息填入不 ...
- C语言------结构体和共用体
仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...
- go-zero docker-compose 搭建课件服务(八):集成jaeger链路追踪
0.转载 go-zero docker-compose 搭建课件服务(八):集成jaeger链路追踪 0.1源码地址 https://github.com/liuyuede123/go-zero-co ...
- k8s机器群扩容问题
今天遇到了一个很奇葩的问题.公司新人吧k8s集权扩容完后,发现服务器上的磁盘没有做分区2T磁盘没有做任何动作 把两台slave节点扩容上去的节点弄到了/目录.由于是生产环境情况比较特殊并没通过kube ...
- 常用Linux命令(常年更新)
Linux后台运行脚本: nohup python -u test.py > out.log 2>&1 & nohup sh **.sh > /dev/null 2& ...
- element-plus 消息提示
用来显示「成功.警告.消息.错误」类的操作 <template> <el-button :plain="true" @click="open2" ...
- 「浙江理工大学ACM入队200题系列」问题 F: 零基础学C/C++39——求方程的解
本题是浙江理工大学ACM入队200题第四套中的F题 我们先来看一下这题的题面. 由于是比较靠前的题目,这里插一句.各位新ACMer朋友们,请一定要养成仔细耐心看题的习惯,尤其是要利用好输入和输出样例. ...
- c++ 关于引用变量你不知道的东西
引用变量延迟绑定 我们知道引用变量定义时要立刻赋值,告诉编译器他是谁的引用.如果不赋值,编译会失败. 如果引用变量是单个定义的,对他赋值还比较简单. struct test_T { int data; ...