HBase操作实践之JAVA API
【摘要】 环境准备依赖<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>2.4.11</version> <exclusions> <exclusion> <groupId>org.glassfish<...
环境准备
-
依赖
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>2.4.11</version>
<exclusions>
<exclusion>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b06</version>
</dependency>
-
windows配置ip映射
API
|
含义
|
创建
|
Configuration
|
配置文件
|
HBaseConfiguration.create();
|
Connection
|
连接,用来操作数据
|
ConnectionFactory.createConnection(conf);
|
Admin
|
客户端,用来操作元数据 (namespace和table结构)
|
conn.getAdmin();
|
NamespaceDescriptor
|
命名空间相当于database
|
NamespaceDescriptor.create("testns").build();
|
TableName
|
表名
|
TableName.valueOf("testns:user");
|
HTableDescriptor
|
表
|
new HTableDescriptor(tablename);
|
HColumnDescriptor
|
列族
|
new HColumnDescriptor("info");
|
Put
|
添加数据
|
new Put(Bytes.toBytes("10001"));
|
Delete
|
rowkey的删除条件
|
new Delete(Bytes.toBytes("10001"));
|
Get
|
scan多行查询器
|
new Get(Bytes.toBytes("10019"));
|
Scan
|
scan多行查询器
|
new Scan();
|
Result
|
查询结果集(单条结果)
|
table.get(get);
|
ResultScanner
|
查询结果集(N条结果)
|
table.getScanner(scan);
|
Bytes
|
类型转化工具类,HBase中数据类型为字节, 所有类型存入后都变成字节,需要相互转化。
|
|
HBase客户端连接
注意:配置windows向linux的ip映射。
// 获得客户端
//1. 读取配置文件
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum","hadoop10");
BasicConfigurator.configure();//打印日志信息
//2. 建立连接
Connection conn = ConnectionFactory.createConnection(conf);
//3. 获得客户端
admin = conn.getAdmin();
// 释放资源
admin.close();
常用API
1. 创建namespace
//1. 构建namespace信息。 create_namespace 'testns'
NamespaceDescriptor testns = NamespaceDescriptor.create("testns").build();
//2. 创建namespace
admin.createNamespace(testns);
2. 表操作
操作表,使用admin
-
判断表是否存在
//1. 创建表名
TableName tableName = TableName.valueOf("testns:person");
//2. 判断表是否存在
boolean b = admin.tableExists(tableName);
System.out.println(b?"存在":"不存在");
-
创建表
//1. 初始化表名 create 'testns:person','info','addr'
TableName person = TableName.valueOf("testns:person");
//2. 初始化列族信息
HColumnDescriptor info = new HColumnDescriptor("info");
HColumnDescriptor addr = new HColumnDescriptor("addr");
//3. 绑定表名,绑定列族
HTableDescriptor hTableDescriptor = new HTableDescriptor(person);
hTableDescriptor.addFamily(info);
hTableDescriptor.addFamily(addr);
//4. 创建表
admin.createTable(hTableDescriptor);
3. 添加
操作数据使用conn
//1. 初始化要操作的表
Table table = conn.getTable(TableName.valueOf("testns:person"));
//2. 创建 添加数据
Put put = new Put(Bytes.toBytes("1001"));//构造rowkey
// Bytes是HBase提供的进行字节和java数据类型转化的工具类
put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"),Bytes.toBytes("张三") );
put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("age"), Bytes.toBytes(18));
put.addColumn(Bytes.toBytes("addr"), Bytes.toBytes("zipCode"), Bytes.toBytes("45000"));
//3. 将put数据添加。
table.put(put);
//4. 释放资源
table.close();
4.修改
//1. 初始化要操作的表
Table table = conn.getTable(TableName.valueOf("testns:person"));
//2. 修改的本质就是添加,利用时间戳覆盖旧的数据而已。
Put put = new Put(Bytes.toBytes("1001"));
put.addColumn(Bytes.toBytes("addr"), Bytes.toBytes("zipCode"), Bytes.toBytes("45001"));
//3. 添加到表中
table.put(put);
//4. 关闭table
table.close();
5.删除
//1. 获得要操作的表
Table table = conn.getTable(TableName.valueOf("testns:person"));
//2. 创建要删除的条件,以rowkey为条件
Delete delete = new Delete(Bytes.toBytes("1001"));
//删除某个列族
//delete.addFamily(Bytes.toBytes("cf2"));
//删除某个列
//delete.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("age"));
//3. 执行删除
table.delete(delete);
6.查询
//根据rowkey查询
//1. 获得要操作的表
Table table = conn.getTable(TableName.valueOf("testns:person"));
//2. 使用rowkey作为查询条件
Get get = new Get(Bytes.toBytes("10019"));
//3. 执行查询
Result result = table.get(get);
//4. 处理结果集:result.getValue;
byte[] namebyte = result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"));
//下面代码雷同。
byte[] agebyte = result.getValue(Bytes.toBytes("info"), Bytes.toBytes("age"));
byte[] zipbyte = result.getValue(Bytes.toBytes("addr"), Bytes.toBytes("zipCode"));
//获得rowkey
byte[] rowbytes = result.getRow();
System.out.println(Bytes.toString(namebyte));
System.out.println(Bytes.toInt(agebyte));
System.out.println(Bytes.toString(zipbyte));
//多条查询
//1. 获得要操作的表
Table table = conn.getTable(TableName.valueOf("testns:person"));
//2. 创建scan扫描器,多行查询
Scan scan = new Scan();
//3. 指定要投射的列族。
scan.addFamily(Bytes.toBytes("info"));
scan.addFamily(Bytes.toBytes("addr"));
//4. 设置起始和查询条数
scan.setStartRow(Bytes.toBytes("1001"));
scan.setFilter(new PageFilter(3));
//5. 执行查询
ResultScanner result = table.getScanner(scan);
//6. 处理结果集
for (Result res:result){
byte[] namebyte = res.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"));
byte[] agebyte = res.getValue(Bytes.toBytes("info"), Bytes.toBytes("age"));
byte[] zipCodebyte = res.getValue(Bytes.toBytes("addr"), Bytes.toBytes("zipCode"));
String name = Bytes.toString(namebyte);
int age = Bytes.toInt(agebyte);
String zipcode = Bytes.toString(zipCodebyte);
System.out.println(name+":"+age+":"+zipcode);
}
//7. 关闭table
table.close();
//范围查询
//1. 获得要操作的表
Table table = conn.getTable(TableName.valueOf("testns:person"));
//2. 创建scan扫描器,多行查询
Scan scan = new Scan();
//3. 指定要投射的列族。
scan.addFamily(Bytes.toBytes("info"));
scan.addFamily(Bytes.toBytes("addr"));
//4. 设置起始和查询条数
scan.setStartRow(Bytes.toBytes("1001"));
scan.setStopRow(Bytes.toBytes("1003"));
//5. 执行查询
ResultScanner result = table.getScanner(scan);
//6. 处理结果集
for (Result res:result){
byte[] namebyte = res.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"));
byte[] agebyte = res.getValue(Bytes.toBytes("info"), Bytes.toBytes("age"));
byte[] zipCodebyte = res.getValue(Bytes.toBytes("addr"), Bytes.toBytes("zipCode"));
String name = Bytes.toString(namebyte);
int age = Bytes.toInt(agebyte);
String zipcode = Bytes.toString(zipCodebyte);
System.out.println(name+":"+age+":"+zipcode);
}
//7. 关闭table
table.close();
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)