import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.;
import org.apache.hadoop.hbase.client.;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class demo02 {
/**
* 创建表
* @throws Exception
*/
@Test
public void createTable() throws Exception{
//获取配置
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01,node02,node03");
Connection connection = ConnectionFactory.createConnection(configuration);
Admin admin = connection.getAdmin();
//创建表描述器
HTableDescriptor a = new HTableDescriptor(TableName.valueOf("b"));
//添加组丶列
a.addFamily(new HColumnDescriptor("f1"));
a.addFamily(new HColumnDescriptor("f2"));
//创建表
boolean a1 = admin.tableExists(TableName.valueOf("b"));
if (!a1){
admin.createTable(a);
}
admin.close();
}
/**
* 删除表
*/
@Test
public void dropTable() throws Exception{
//获取配置信息
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01,node02,node03");
Connection connection = ConnectionFactory.createConnection(configuration);
Admin admin = connection.getAdmin();
//判断表是否存在,存在就删除
boolean a = admin.tableExists(TableName.valueOf("a"));
if (a){
admin.disableTable(TableName.valueOf("a"));
admin.deleteTable(TableName.valueOf("a"));
}else {
System.out.println("表不存在");
return;
}
admin.close();
}
/**
* 创建命名空间
*/
@Test
public void createNameSpace() throws Exception{
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01,node02,node03");
Connection connection = ConnectionFactory.createConnection(configuration);
Admin admin = connection.getAdmin();
NamespaceDescriptor build = NamespaceDescriptor.create("0418").build();
try {
admin.createNamespace(build);
}catch (NamespaceExistException e){
System.out.println("命名空间已经存在");
}
catch (IOException e) {
e.printStackTrace();
}
admin.close();
}
/**
* 添加数据
*/
@Test
public void addDatas() throws Exception{
//获取配置
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01,node02,node03");
Connection connection = ConnectionFactory.createConnection(configuration);
//获取表
Table table = connection.getTable(TableName.valueOf("b"));
//添加数据
Put put = new Put("0001".getBytes());
// put.addColumn(“f1”.getBytes(),“1”.getBytes(),“lisi”.getBytes());
// put.addColumn(“f1”.getBytes(),“2”.getBytes(),“wangwu”.getBytes());
// put.addColumn(“f1”.getBytes(),“3”.getBytes(),“zhangsan”.getBytes());
// put.addColumn(“f1”.getBytes(),“4”.getBytes(),“zhaoliu”.getBytes());
// put.addColumn(“f2”.getBytes(),“5”.getBytes(),“1”.getBytes());
// put.addColumn(“f2”.getBytes(),“6”.getBytes(),“2”.getBytes());
// put.addColumn(“f2”.getBytes(),“7”.getBytes(),“3”.getBytes());
put.addColumn("f1".getBytes(),"name".getBytes(),Bytes.toBytes("zhqangsan"));
put.addColumn("f1".getBytes(),"address".getBytes(),Bytes.toBytes("lisi"));
put.addColumn("f1".getBytes(),"sex".getBytes(),Bytes.toBytes("wangwu"));
put.addColumn("f1".getBytes(),"wdw".getBytes(),Bytes.toBytes("zhaoliu"));
put.addColumn("f2".getBytes(),"sex".getBytes(),Bytes.toBytes("1"));
List<Put>list = new ArrayList<>();
list.add(put);
//添加
table.put(list);
//关闭资源
table.close();
}
/**
* 获取数据
*/
@Test
public void getData() throws IOException {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01,node02,node03");
Connection connection = ConnectionFactory.createConnection(configuration);
Table a = connection.getTable(TableName.valueOf("b"));
Get get = new Get("0001".getBytes());
Result result = a.get(get);
Cell[] cells = result.rawCells();
for (Cell cell : cells) {
System.out.println("111111 "+Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("222222 "+Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("333333 "+Bytes.toString(CellUtil.cloneValue(cell)));
}
a.close();
}
}
过滤器
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
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;
public class demo01 {
/**
* hbase行键过滤器RowFilter
* 通过RowFilter过滤比rowKey 0003小的所有值出来
*/
@Test
public void rowKeyFilter() throws IOException {
//获取连接
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser = connection.getTable(TableName.valueOf("myuser"));
Scan scan = new Scan();
RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("0003")));
scan.setFilter(rowFilter);
ResultScanner resultScanner = myuser.getScanner(scan);
for (Result result : resultScanner) {
//获取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())));
}
myuser.close();
}
/**
* hbase列族过滤器FamilyFilter
* 查询比f2列族小的所有的列族内的数据
*/
@Test
public void familyFilter() throws IOException {
//获取连接
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser = connection.getTable(TableName.valueOf("myuser"));
Scan scan = new Scan();
FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.LESS, new SubstringComparator("f2"));
scan.setFilter(familyFilter);
ResultScanner resultScanner = myuser.getScanner(scan);
for (Result result : resultScanner) {
//获取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())));
}
myuser.close();
}
/**
* hbase列过滤器
* 只查询name的值
*/
@Test
public void qualifierFilter() throws IOException {
//获取连接
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser = connection.getTable(TableName.valueOf("myuser"));
Scan scan = new Scan();
QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("id"));
scan.setFilter(qualifierFilter);
ResultScanner resultScanner = myuser.getScanner(scan);
for (Result result : resultScanner) {
//获取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())));
}
myuser.close();
}
/**
* hbase值过滤器
* 查询包含8的列值
*/
@Test
public void valueFilter() throws IOException {
//获取连接
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser = connection.getTable(TableName.valueOf("myuser"));
Scan scan = new Scan();
ValueFilter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("8"));
scan.setFilter(valueFilter);
ResultScanner resultScanner = myuser.getScanner(scan);
for (Result result : resultScanner) {
//获取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("f2".getBytes(), "phone".getBytes())));
}
myuser.close();
}
/**
* 单列值过滤器,返回满足条件的整行数据
*/
@Test
public void singleColumnFilter() throws IOException {
//获取连接
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser = connection.getTable(TableName.valueOf("myuser"));
Scan scan = new Scan();
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, "刘备".getBytes());
scan.setFilter(singleColumnValueFilter);
ResultScanner resultScanner = myuser.getScanner(scan);
for (Result result : resultScanner) {
//获取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())));
}
myuser.close();
}
/**
* 行键前缀过滤器
* 查询以00开头的所有前缀的rowkey
*/
@Test
public void preFilter() throws IOException {
//获取连接
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser = connection.getTable(TableName.valueOf("myuser"));
Scan scan = new Scan();
PrefixFilter prefixFilter = new PrefixFilter("00".getBytes());
scan.setFilter(prefixFilter);
ResultScanner resultScanner = myuser.getScanner(scan);
for (Result result : resultScanner) {
//获取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())));
}
myuser.close();
}
/**
* 分页过滤器
* 通过pageFilter实现分页过滤器
* @throws IOException
*/
@Test
public void pageFilter2() throws IOException {
//获取连接
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser = connection.getTable(TableName.valueOf("myuser"));
int pageNum = 3;
int pageSize = 2;
Scan scan = new Scan();
if (pageNum == 1) {
PageFilter filter = new PageFilter(pageSize);
scan.setStartRow(Bytes.toBytes(""));
scan.setFilter(filter);
scan.setMaxResultSize(pageSize);
ResultScanner scanner = myuser.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())));
}
}else{
String startRowKey ="";
PageFilter filter = new PageFilter((pageNum - 1) * pageSize + 1 );
scan.setStartRow(startRowKey.getBytes());
scan.setMaxResultSize((pageNum - 1) * pageSize + 1);
scan.setFilter(filter);
ResultScanner scanner = myuser.getScanner(scan);
for (Result result : scanner) {
byte[] row = result.getRow();
startRowKey = new String(row);
}
Scan scan2 = new Scan();
scan2.setStartRow(startRowKey.getBytes());
scan2.setMaxResultSize(Long.valueOf(pageSize));
PageFilter filter2 = new PageFilter(pageSize);
scan2.setFilter(filter2);
ResultScanner scanner1 = myuser.getScanner(scan2);
for (Result result : scanner1) {
byte[] row = result.getRow();
System.out.println(new String(row));
}
}
myuser.close();
}
/**
* 多过滤器组合使用
* 需求:使用SingleColumnValueFilter查询f1列族,name为刘备的数据,并且同时满足rowkey的前缀以00开头的数据(PrefixFilter)
*/
@Test
public void manyFilter() throws IOException {
//获取连接
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser = connection.getTable(TableName.valueOf("myuser"));
Scan scan = new Scan();
FilterList filterList = new FilterList();
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, "刘备".getBytes());
PrefixFilter prefixFilter = new PrefixFilter("00".getBytes());
filterList.addFilter(singleColumnValueFilter);
filterList.addFilter(prefixFilter);
scan.setFilter(filterList);
ResultScanner scanner = myuser.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())));
}
myuser.close();
}
}