文章目录
- 1.获取连接
- 2.创建连接
- 3.获取 表名 和连接表
- 4.获取 管理员身份
- 使用admin 进行表操作
- 使用Delete删除表
- 使用get 根据rowkey 查询
- 使用admin 操作命名空间
- 释放资源
- 代码示例
- 5. put插入数据 部分示例
- 6.scan 全表扫描
- 7.Filter 过滤器
- 8.Hbase中的运算符
- 9.Hbase 过滤器的比较器
- 10.结果集 ResultScanner
1.获取连接
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
2.创建连接
Connection connection = ConnectionFactory.createConnection(conf);
3.获取 表名 和连接表
TableName tableName = TableName.valueOf("hbase_race");
Table table = connection.getTable(tableName);
4.获取 管理员身份
Admin admin = connection.getAdmin();
使用admin 进行表操作
方法 |
含义 |
boolean tableExists(TableName tableName) |
判断表是否存在 |
void createTable(TableName tableName) |
创建表 |
void enableTable(TableName tableName) |
禁用表 |
boolean isTableEnabled(TableName tableName) |
判断表是否启用 |
boolean isTableAvailable(TableName tableName) |
判断表是否可用 |
void addColumnFamily(TableName tableName,ColumnFamilyDescriptor columnFamily) |
往指定的表中添加列族 |
void deleteColumn(TableName tableName,byte[] columnFamily) |
删除指定的表中的列 |
void deleteColumnFamily(TableName tableName,byte[] columnFamily) |
删除指定的表中的列族 |
使用Delete删除表
@Test
public void deleteByRowKey() throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
TableName myUser = TableName.valueOf("myUser");
Table table = connection.getTable(myUser);
Delete delete = new Delete("0001".getBytes());
table.delete(delete);
table.close();
}
使用get 根据rowkey 查询
@Test
public void searchData() throws IOException {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
Connection connection = ConnectionFactory.createConnection(configuration);
Table myuser = connection.getTable(TableName.valueOf("myUser"));
Get get = new Get("0003".getBytes());
Result result = myuser.get(get);
byte[] row = result.getRow();
System.out.println("row = " + Bytes.toString(row));
Cell[] cells = result.rawCells();
for (Cell cell : cells) {
if ("id".equals(Bytes.toString(CellUtil.cloneQualifier(cell))) || "age".equals(Bytes.toString(CellUtil.cloneQualifier(cell)))) {
String s1 = Bytes.toString(CellUtil.cloneQualifier(cell));
int i2 = Bytes.toInt(CellUtil.cloneValue(cell));
System.out.println("s1 = " + s1);
System.out.println("i2 = " + i2);
} else {
String s1 = Bytes.toString(CellUtil.cloneQualifier(cell));
String s2 = Bytes.toString(CellUtil.cloneValue(cell));
System.out.println("s1 = " + s1);
System.out.println("s2 = " + s2);
}
}
myuser.close();
}
使用admin 操作命名空间
方法 |
含义 |
namespaceDescriptor getNamespaceDescriptor(String namespace) |
获取命名空间 |
void createNamespace(NamespaceDescriptor namespace) |
创建命名空间 |
void deleteNamespace(String namespace) |
删除命名空间 |
释放资源
代码示例
@Test
public void testNamespace() throws Exception {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
try {
NamespaceDescriptor rel = admin.getNamespaceDescriptor("hbase_result");
} catch (NamespaceNotFoundException e) {
NamespaceDescriptor namespace = NamespaceDescriptor.create("hbase_result").build();
admin.createNamespace(namespace);
}
TableName tableName = TableName.valueOf("hbase_result:test01");
HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
hTableDescriptor.addFamily(new HColumnDescriptor("info"));
boolean exists = admin.tableExists(tableName);
if (!exists) {
admin.createTable(hTableDescriptor);
}
admin.close();
connection.close();
}
5. put插入数据 部分示例
Table myuser = connection.getTable(TableName.valueOf("myUser"));
Put put = new Put("0001".getBytes());
put.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1));
myuser.put(put);
6.scan 全表扫描
方法 |
含义 |
setStartRow(byte[] StartRowKey) |
从第几个rowkey开始扫描 |
setStopRow(byte[] StartRowKey) |
到第几个rowkey结束 |
setFilter(Filter filter) |
设置过滤器 |
setMaxVersions(int maxVersion) |
指定最大的版本个数。 |
setTimeRange(Long min,Long max) |
指定最大的时间戳和最小的时间戳 |
setTimeStamp(Long long) |
指定时间戳 |
setBatch(int batch) |
指定最多返回的Cell数目 |
7.Filter 过滤器
过滤器 |
含义 |
FilterList |
过滤器列表,用于使用多个过滤器时 |
SingleColumnValueFilter |
单列值过滤器,用于过滤单列的值 |
PrefixFilter |
rowkey前缀过滤器PrefixFilter,如果包含前缀,返回结果 |
ColumnPrefixFilter |
单列前缀过滤器,判断当前列是否包含某个前缀,是这返回匹配列的值 |
MultipleColumnPrefixFilter |
多列过滤器,但可以指定包含多个列的前缀,返回匹配值 |
QualifierFilter |
列过滤器 |
RowFilter |
行键过滤器用于过滤rowkey |
FamilyFilter |
列族过滤器 |
SingleColumnValueExcludeFilter |
单列值排除过滤器 |
pageFilter |
实现分页过滤器 |
valueFilter |
列值过滤器 |
8.Hbase中的运算符
LESS <
LESS_OR_EQUAL <=
EQUAL =
NOT_EQUAL <>
GREATER_OR_EQUAL >=
GREATER >
NO_OP 排除所有
9.Hbase 过滤器的比较器
BinaryComparator(byte[]) 按字节索引顺序比较指定直接数组,采用 Bytes.commpareTo(byte[]) BinaryPrefixComparator(byte []) 跟前面相同,只比较左端的数据是否相同
NullComparator 按位比较
RegexStringComparator 提供一个正则的比较器 仅支持 EQUAL 和 NOT_EQUAL
SubStringComparator 判断提供的字串是否出现在value中 相当于 contains() 方法
代码示例
@Test
public void manyFilter() throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
Connection connection = ConnectionFactory.createConnection(conf);
TableName myUser = TableName.valueOf("myUser");
Table table = connection.getTable(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 = table.getScanner(scan);
for (Result result : scanner) {
System.out.println(Bytes.toString(result.getRow()));
System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
}
table.close();
}
10.结果集 ResultScanner
方法 |
含义 |
result.getValue(byte[] family, byte[] qualifier) |
获取值 |
result.getRow() |
获取rowkey |