package com.czxy.demo01;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.ArrayList;
import static org.apache.hadoop.hbase.filter.CompareFilter.CompareOp.EQUAL;
import static org.apache.hadoop.hbase.filter.CompareFilter.CompareOp.LESS;
public class HBaseAPI2 {
static Configuration configuration = new Configuration();
/**
* 删除表
* 删除表需要管理员权限,先获取管理员权限,再将表的状态设置为disable
* 先修改状态,再删除,若顺序不正确,也无法删除,因为代码的执行顺序是从上到下
* @throws IOException
*/
@Test
public void deleteTable() throws IOException {
//获取连接:Zookeeper
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
//获取要操作的表
Table myuser2 = connection.getTable(TableName.valueOf("staff"));
//获取管理员
Admin admin = connection.getAdmin();
//将表的状态设置为disable
admin.disableTable(TableName.valueOf("staff"));
//使用管理员权限删除表
admin.deleteTable(TableName.valueOf("staff"));
//关闭连接
admin.close();
myuser2.close();
connection.close();
}
/**
* 根据rowkey删除数据
* @throws IOException
*/
@Test
public void deleteDataByRowKey() throws IOException {
//
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
Delete delete=new Delete("001".getBytes());
myuser2.delete(delete);
myuser2.close();
connection.close();
}
/**
* 多过滤器综合查询FilterList
* 需求:使用SingleColumnValueFilter查询f1列族,name为刘备的数据,并且同时满足rowkey的前缀以00开头的数据(PrefixFilter)
* @throws IOException
*/
@Test
public void manyFilter() throws IOException {
//获取连接
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
Scan scan=new Scan();
FilterList filterList = new FilterList();
SingleColumnValueFilter singleColumnValueFilter=new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), EQUAL, "刘备".getBytes());
PrefixFilter prefixFilter=new PrefixFilter("00".getBytes());
filterList.addFilter(singleColumnValueFilter);
filterList.addFilter(prefixFilter);
scan.setFilter(filterList);
ResultScanner scanner = myuser2.getScanner(scan);
for (Result result : scanner) {
//获取rowkey
System.out.println(Bytes.toString(result.getRow()));
//指定列族以及列打印列当中的数据出来
// System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
//System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));
}
myuser2.close();
connection.close();
}
/**
* rowkey前缀过滤器PrefixFilter
* 查询以00开头的所有前缀的rowkey
* @throws IOException
*/
@Test
public void preFixFilter() throws IOException {
//获取连接
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
Scan scan=new Scan();
PrefixFilter prefixFilter=new PrefixFilter("000".getBytes());
scan.setFilter(prefixFilter);
ResultScanner scanner = myuser2.getScanner(scan);
for (Result result : scanner) {
System.out.println(Bytes.toString(result.getRow()));
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));
}
myuser2.close();
connection.close();
}
/**
* 列值排除过滤器SingleColumnValueExcludeFilter
* @throws IOException
*/
@Test
public void singleColumnValueExcludeFilter() throws IOException {
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
Scan scan=new Scan();
SingleColumnValueExcludeFilter singleColumnValueExcludeFilter=new SingleColumnValueExcludeFilter("f1".getBytes(), "name".getBytes(), EQUAL, "刘备".getBytes());
scan.setFilter(singleColumnValueExcludeFilter);
ResultScanner scanner = myuser2.getScanner(scan);
for (Result result : scanner) {
System.out.println(Bytes.toString(result.getRow()));
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));
}
myuser2.close();
connection.close();
}
/**
* 单列值过滤器 SingleColumnValueFilter
*
* @throws IOException
*/
@Test
public void singleColumnFilter() throws IOException {
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
Scan scan = new Scan();
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), EQUAL, "刘备".getBytes());
scan.setFilter(singleColumnValueFilter);
ResultScanner scanner = myuser2.getScanner(scan);
for (Result result : scanner) {
System.out.println(Bytes.toString(result.getRow()));
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));
}
myuser2.close();
connection.close();
}
/**
* 列值过滤器Filter
* 查询所有列当中包含8的数据
*
* @throws IOException
*/
@Test
public void valueFilter() throws IOException {
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
Scan scan = new Scan();
ValueFilter valueFilter = new ValueFilter(EQUAL, new SubstringComparator("8"));
scan.setFilter(valueFilter);
ResultScanner scanner = myuser2.getScanner(scan);
for (Result result : scanner) {
System.out.println(Bytes.toString(result.getRow()));
//指定列族以及列打印列当中的数据出来
System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));
}
myuser2.close();
connection.close();
}
/**
* 列过滤器QualifierFilter
* 只查询name列的值
*
* @throws IOException
*/
@Test
public void qualifierFilter() throws IOException {
//获取连接
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
Scan scan = new Scan();
QualifierFilter qualifierFilter = new QualifierFilter(EQUAL, new SubstringComparator("name"));
scan.setFilter(qualifierFilter);
ResultScanner scanner = myuser2.getScanner(scan);
for (Result result : scanner) {
System.out.println(Bytes.toString(result.getRow()));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
myuser2.close();
connection.close();
}
/**
* 列族过滤器FamilyFilter
* 查询比f2列族小的所有的列族内的数据
*
* @throws IOException
*/
@Test
public void familyFilter() throws IOException {
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
Scan scan = new Scan();
FamilyFilter familyFilter = new FamilyFilter(LESS, new SubstringComparator("f2"));
scan.setFilter(familyFilter);
ResultScanner scanner = myuser2.getScanner(scan);
for (Result result : scanner) {
System.out.println(Bytes.toString(result.getRow()));
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "age".getBytes())));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
myuser2.close();
connection.close();
}
/**
* rowKey过滤器
* 通过RowFilter过滤比rowKey 0003小的所有值出来
*
* @throws IOException
*/
@Test
public void rowKeyFilter() throws IOException {
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
Scan scan = new Scan();
RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("0003")));
scan.setFilter(rowFilter);
ResultScanner scanner = myuser2.getScanner(scan);
for (Result result : scanner) {
//获取rowKey
System.out.println(Bytes.toString(result.getRow()));
//输出指定列族以及列数据
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "age".getBytes())));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
myuser2.close();
connection.close();
}
/**
* 通过 scan 全表扫描数据
*
* @throws IOException
*/
@Test
public void findDataByScan() throws IOException {
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
//实例全表扫描对象 scan
Scan scan = new Scan();
//获取区间的所有数据,返回一个集合
ResultScanner scanner = myuser2.getScanner(scan);
//遍历集合 输出数据
for (Result result : scanner) {
System.out.println("rowKey ---> " + Bytes.toString(result.getRow()));
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "age".getBytes())));
}
myuser2.close();
connection.close();
}
/**
* 根据起始RowKey查询区间数据
*
* @throws IOException
*/
@Test
public void findDataByStartRwAndStopRw() throws IOException {
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
//实例全表扫描对象 scan
Scan scan = new Scan();
//设置StartRowKey 和 StopRowKey
scan.setStartRow("0002".getBytes());
scan.setStopRow("0005".getBytes());
//获取区间的所有数据,返回一个集合
ResultScanner scanner = myuser2.getScanner(scan);
//遍历集合 输出数据
for (Result result : scanner) {
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "age".getBytes())));
}
myuser2.close();
connection.close();
}
/**
* 查询指定列族&&特定列数据
*
* @throws IOException
*/
@Test
public void findDatasByRowKey() throws IOException {
//1.连接数据库
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
//2.获取数据表
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
//3.设置要读取数据的rowkey
Get get = new Get("0002".getBytes());
//4.查询指定列族数据
//get.addFamily("f1".getBytes());
//查询指定列族下特定列的数据
get.addColumn("f1".getBytes(), "age".getBytes());
//5.读取数据---->每一行数据
Result result = myuser2.get(get);
//6.读取每一行数据的所有列字段,返回数据
Cell[] cells = result.rawCells();
//7.遍历数组,输出数据信息
for (Cell cell : cells) {
String s = Bytes.toString(CellUtil.cloneQualifier(cell));
if (s.equals("id") || s.equals("age")) {
//获得列族
System.out.println(Bytes.toString(CellUtil.cloneFamily(cell)));
//获得具体列
System.out.println(Bytes.toString(CellUtil.cloneQualifier(cell)));
//获得具体列的value
System.out.println(Bytes.toInt(CellUtil.cloneValue(cell)));
} else {
//获得列族
System.out.println(Bytes.toString(CellUtil.cloneFamily(cell)));
//获得具体列
System.out.println(Bytes.toString(CellUtil.cloneQualifier(cell)));
//获得具体列的value
System.out.println(Bytes.toString(CellUtil.cloneValue(cell)));
}
}
//8.关闭连接
myuser2.close();
connection.close();
}
/**
* 根据主键rowkey查询数据
*
* @throws IOException
*/
@Test
public void findDataByRowKey() throws IOException {
//1.连接数据库
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
//2.获取要查询的数据表
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
//3.实例get对象,设置要读取数据的rowkey
Get get = new Get("001".getBytes());
//4.获取该rowkey所对应的数据
Result result = myuser2.get(get);
//5.读取数据---->每一行数据
Cell[] cells = result.rawCells();
//6.读取每一行数据的所有列字段,返回数据
for (Cell cell : cells) {
//输出列族
System.out.println(Bytes.toString(CellUtil.cloneFamily(cell)));
//输出列
System.out.println(Bytes.toString(CellUtil.cloneQualifier(cell)));
//输出列的value值
System.out.println(Bytes.toString(CellUtil.cloneValue(cell)));
}
//7.关闭连接
connection.close();
}
/**
* 插入多条数据,list集合插入数据
*
* @throws IOException
*/
@Test
public void putDataList() throws IOException {
//1.连接数据库,找到要添加数据的表
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
//2.实例多个put对象,插入不同数据
Put put = new Put("0002".getBytes());
put.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1));
put.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("曹操"));
put.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(30));
put.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("沛国谯县"));
put.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("16888888888"));
put.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("helloworld"));
Put put2 = new Put("0003".getBytes());
put2.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(2));
put2.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("刘备"));
put2.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(32));
put2.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put2.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("幽州涿郡涿县"));
put2.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("17888888888"));
put2.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("talk is cheap , show me the code"));
Put put3 = new Put("0004".getBytes());
put3.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(3));
put3.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("孙权"));
put3.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(35));
put3.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put3.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("下邳"));
put3.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("12888888888"));
put3.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("what are you 弄啥嘞!"));
//添加多个put对象数据
ArrayList<Put> list = new ArrayList<>();
list.add(put);
list.add(put2);
list.add(put3);
myuser2.put(list);
//3.关闭连接
myuser2.close();
connection.close();
}
/**
* 插入单条数据
*
* @throws IOException
*/
@Test
public void putData() throws IOException {
//1.连接数据库
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
//获取要添加数据的表名
Table myuser2 = connection.getTable(TableName.valueOf("myuser2"));
//2.实例put对象,插入数据
Put put = new Put("001".getBytes());
put.addColumn("f1".getBytes(), "name".getBytes(),Bytes.toBytes("zhangsan"));
put.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1));
put.addColumn("f1".getBytes(), "age".getBytes(),Bytes.toBytes(18));
myuser2.put(put);
//3.关闭连接
connection.close();
}
/**
* 创建表
*
* @throws IOException
*/
@Test
public void createTable() throws IOException {
//1.连接数据库
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
//2.实例admin管理员
Admin admin = connection.getAdmin();
//2.1设置表名
TableName tableName = TableName.valueOf("myuser2");
//2.2设置表结构
HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
//2.3设置列族
HColumnDescriptor f1 = new HColumnDescriptor("f1");
HColumnDescriptor f2 = new HColumnDescriptor("f2");
//2.4建立表与列族之间的关系
hTableDescriptor.addFamily(f1);
hTableDescriptor.addFamily(f2);
//2.5创建表
admin.createTable(hTableDescriptor);
//3.关闭连接
admin.close();
connection.close();
}
@Test
public void putDataList1() throws IOException {
//1.连接数据库,找到要添加数据的表
configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser2 = connection.getTable(TableName.valueOf("user"));
//2.实例多个put对象,插入不同数据
Put put = new Put("0002".getBytes());
put.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1));
put.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("曹操"));
put.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(30));
put.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("沛国谯县"));
put.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("16888888888"));
put.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("helloworld"));
Put put2 = new Put("0003".getBytes());
put2.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(2));
put2.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("刘备"));
put2.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(32));
put2.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put2.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("幽州涿郡涿县"));
put2.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("17888888888"));
put2.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("talk is cheap , show me the code"));
Put put3 = new Put("0004".getBytes());
put3.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(3));
put3.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("孙权"));
put3.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(35));
put3.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
put3.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("下邳"));
put3.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("12888888888"));
put3.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("what are you 弄啥嘞!"));
//添加多个put对象数据
ArrayList<Put> list = new ArrayList<>();
list.add(put);
list.add(put2);
list.add(put3);
myuser2.put(list);
//3.关闭连接
myuser2.close();
connection.close();
}
}
HBase之JavaAPI
最新推荐文章于 2024-09-03 17:17:12 发布
本文详细探讨了如何使用HBase的Java API进行数据操作,包括连接HBase集群、创建表、插入数据、查询与扫描等关键步骤。通过实例代码,深入理解HBase的API用法及其在大数据存储中的作用。
摘要由CSDN通过智能技术生成