org.apache.hadoop.hbase.client.Connection
Hbase Client 主要的链接对象,用来对Hbase Server进行操作。
org.apache.hadoop.conf.Configuration
Hbase 主要的配置对象,用来配置Client与Server直接的链接配置。
org.apache.hadoop.hbase.client.Admin
HBase Admin负责表的META信息处理。
org.apache.hadoop.hbase.client.Table
Hbase 的表对象
org.apache.hadoop.hbase.client.Scan
Hbase 表扫描器。
org.apache.hadoop.hbase.client.Result
Hbase 结果集
// 创建Hbase conf对象
org.apache.hadoop.conf.Configuration conf = org.apache.hadoop.hbase.HBaseConfiguration.create() ;
// 设置配置参数
conf.set("hbase.zookeeper.quorum", "pazi1,pazi2,pazi3"); // zookeeper节点信息
conf.set("hbase.zookeeper.property.clientPort", "2181"); // zookeeper端口
conf.set("dfs.socket.timeout", "180000"); // 超时时间
// 创建链接对象
org.apache.hadoop.hbase.client.Connection conn = org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(conf);
// 上面是创建一个链接对象,如果想创建线程池,那么就按下面来
// 创建线程池对象
java.util.concurrent.ExecutorService pool = Executors.newFixedThreadPool(10);
// 创建Hbase 链接对象
Connection connection = ConnectionFactory.createConnection(conf,pool);
// 获取Hbase管理对象,后续操作需要用到
Admin admin = conn.getAdmin();
// 创建命名空间构造器
org.apache.hadoop.hbase.NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create("Pazii").build();
// 创建
admin.createNamespace(namespaceDescriptor);
admin.deleteNamespace("Pazii");
// 命名空间构造器
NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create("Pazii").build();
// 添加属性
namespaceDescriptor.setConfiguration("Pazi", "Pazi");
// 修改
admin.modifyNamespace(namespaceDescriptor);
// 获取全部
NamespaceDescriptor[] listNamespaceDescriptors = admin.listNamespaceDescriptors();
for (NamespaceDescriptor namespaceDescriptor2 : listNamespaceDescriptors) {
// 名称
String name = namespaceDescriptor2.getName();
// 所有属性
Map<String, String> configuration = namespaceDescriptor2.getConfiguration();
}
// 创建表构造器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName);
// 列族构造器,设置列族属性
ColumnFamilyDescriptor columnFamilyDescriptor = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("c"))
.setCompressionType(Algorithm.GZ) // 压缩方式
.setTimeToLive(10) // 数据生存时间,S
.setMaxVersions(2)
.setMinVersions(1) // 最大最小版本数
.setBloomFilterType(BloomType.ROW) // 布隆过滤器默认是开启的,并且默认为行模式
.setBlockCacheEnabled(false) // 开启块缓存
.build();
// 给表添加列族
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptor);
// 也可以直接创建列族,属性全部走默认.
tableDescriptorBuilder.setColumnFamily(ColumnFamilyDescriptorBuilder.of("a"));
// 创建表
admin.createTable(tableDescriptorBuilder.build());
// 删除表
// 1 禁用要删除的表
admin.disableTable(TableName.valueOf("pazi"));
// 2 删除禁用的表
admin.deleteTable(TableName.valueOf("pazi"));
// 3 如果不删除,则需要重新将表置为可用
admin.enableTable(TableName.valueOf("pazi"));
// 修改表
// 大体过程跟上面创建表一样,将要修改表的属性构造器创建完毕,然后修改即可.
admin.modifyTable(tableDescriptorBuilder.build());
// 查看
// 获取所有表名以及表信息
TableName[] listTableNames = admin.listTableNames();
for (TableName tableName2 : listTableNames) {
String nameAsString = tableName2.getNameAsString();
String namespaceAsString = tableName2.getNamespaceAsString();
}
// 获取表对象
Table table = connection.getTable(tableName);
// 创建Put对象
Put put = new Put(Bytes.toBytes("pazi"));
// 设置数据
put.addColumn(/**family*/Bytes.toBytes("pazi"), /**family*/Bytes.toBytes("pazi"), /**family*/Bytes.toBytes("pazi"));
// 添加数据
table.put(put);
// 创建Delete对象
Delete delete = new Delete(/** rowkey */Bytes.toBytes("pazi"));
// 删除
table.delete(delete);
Hbase 修改数据的话不是很好.
// 1 准确查询
Get get = new Get(/** rowkey */Bytes.toBytes("pazi"));
Result result = table.get(get);
Cell[] rawCells = result.rawCells();
for (Cell cell : rawCells) {
System.out.println("rowkey::" + new String(CellUtil.cloneRow(cell)));
System.out.println("timeStamp::" + cell.getTimestamp());
System.out.println("columnFamily::" + new String(CellUtil.cloneFamily(cell)));
System.out.println("colum::" + new String(CellUtil.cloneQualifier(cell)));
System.out.println("value::" + new String(CellUtil.cloneValue(cell)));
}
// 2 扫描表
Scan scan = new Scan();
// 设置扫描范围
scan.withStartRow(/** 起始rowkey */Bytes.toBytes("pazi"), /** 是否包含此条记录 */true);
scan.withStopRow(/** 结束rowkey */Bytes.toBytes("pazi"), /** 是否包含此条记录 */true);
// ---------有关行键的过滤器---------
// 行键前缀过滤器
Filter f = new PrefixFilter(Bytes.toBytes("15"));
// 只扫描行键的过滤器,不获取值
// Filter f = new KeyOnlyFilter();
// 随机行过滤器,按比例获取随机行数
// Filter f = new RandomRowFilter(0.5f);
// 行范围过滤器
// List list = new ArrayList<>();
// list.add(new MultiRowRangeFilter.RowRange("1001",true,"1004",true));
// Filter f = new MultiRowRangeFilter(list);
// 行键过滤器,可以通过提供不同比较器实现不同功能,如匹配行键前缀
// Filter f = new RowFilter(CompareOperator.EQUAL, new BinaryPrefixComparator(Bytes.toBytes("10")));
// 列族相关过滤器,匹配正则表达式
// Filter f = new FamilyFilter(CompareOperator.EQUAL, new RegexStringComparator(".*base.*"));
// 列相关过滤器,获得前n列过滤器
// Filter f = new ColumnCountGetFilter(1);
// 列分页过滤器 基于ColumnPaginationFilter,参数1 获得n列 参数2 从第n列开始获取
// Filter f = new ColumnPaginationFilter(3,1);
// 列名前缀过滤器
// Filter f = new ColumnPrefixFilter(Bytes.toBytes("na"));
// 列名范围过滤器
// Filter f = new ColumnRangeFilter(Bytes.toBytes("aaa"),true,Bytes.toBytes("ccc"),true);
// 匹配某列族某列某值的过滤器
// Filter f = new ColumnValueFilter(Bytes.toBytes("info"),Bytes.toBytes("age"),CompareOperator.EQUAL,Bytes.toBytes("20"));
// 根据值的比较过滤行
// Filter f = new ValueFilter(CompareOperator.EQUAL, new RegexStringComparator(".*t.*"));
// 设置扫描的过滤器
scan.setFilter(f);
ResultScanner scanner = table.getScanner(scan);
Result result2 ;
if((result2=scanner.next()) != null) {
List<Cell> listCells = result2.listCells();
// ...
}