HBase学习笔记,
文章目录
- HBase
- 1. 简介
- 2. 工作机制
- 3. 环境搭建
- 4. 使用
- 4.1 Shell操作
- 4.2 Java API 操作
HBase
1. 简介
- HBase是Hadoop Database,是一个分布式的、可扩展的大数据存储仓库。
- 当需要随机访问数据、实时的读写数据时使用。
- HBase是No-SQL数据库。
2. 工作机制
读写流程
HMaster, HRegionServer
两个特殊的表
- -ROOT- : 记录了
.META.
表的Region信息,-ROOT-
只有一个region,其location记录在ZooKeeper中(该表已废弃,仅存在.META.) - .META. : 记录了用户创建的表的Region信息,
.META.
可以有多个Region
HBase表存储结构,多行三列(行键、属性、值)
3. 环境搭建
4. 使用
4.1 Shell操作
具体指令操作看shell提供的帮助文档即可
- 查看帮助文档
help
查看帮助概述(显示所有的指令)help '指令名称'
查看某个指令的帮助(引号必须有)
- general
status
HBase集群状态table_help
简单介绍创建、删除表,添加、查询、删除数据version
HBase版本信息whoami
当前登录HBase的用户信息
- namespace
list_namespace
列出当前的namespacecreate_namespace
创建namespacedescribe_namespace
查看namespace信息alter_namespace
修改namespacedrop_namespace
删除namespacelist_namespace_tables
列出指定namespace下的所有表
- DDL(Data Definition Language)
list
列出所有的表exists
判断表是否存在describe
查看表信息alter
修改表alter_async
异步修改column familyalter_status
获取alter命令的状态create
创建表enable
启用单个表disable
禁用单个表drop
删除单个表enable_all
启动多个表(正则匹配)disable_all
禁用多个表(正则匹配)drop_all
删除多个表(正则匹配)get_table
获得一个表对象is_disabled
是否被禁用is_enabled
是否被启动show_filters
查看过滤器
- DML(Data Manipulation Language)
append
在指定的table/row/column位置添加值put
在指定table/row/column位置放置值incr
指定表/行/列坐标处的计数器单元格值增加count
统计记录行数get
获取某行的数据,或某行指定列的数据scan
扫描一张表。delete
删除指定的table/row/column位置的值deleteall
删除某行、某行的某列get_counter
返回指定表/行/列坐标处的计数器单元格值。 应使用原子增量函数HBase管理单元格,并且数据应该是二进制编码的。truncate
禁用、删除并创建指定的表truncate_preserve
禁用,删除并重新创建指定的表,同时仍保留以前的区域边界。
4.2 Java API 操作
- 导包
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>0.98.6.1-hadoop2</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>0.98.6.1-hadoop2</version>
</dependency>
- Java程序
public class TestHBase {
private Configuration conf = null;
@Before
public void init() {
conf = HBaseConfiguration.create();
// conf.set("hbase.rootir", "hdfs://hh1:9000/hbase");
conf.set("hbase.zookeeper.quorum", "hh1");
}
/**
* 创建命名空间
* @throws Exception
*/
@Test
public void createNamespace() throws Exception {
HBaseAdmin admin = new HBaseAdmin(conf);
NamespaceDescriptor nn = NamespaceDescriptor.create("ns4").build();
admin.createNamespace(nn);
admin.close();
}
/**
* 删除命名空间
* @throws Exception
*/
@Test
public void dropNamespace() throws Exception {
HBaseAdmin admin = new HBaseAdmin(conf);
admin.deleteNamespace("ns2");
admin.close();
}
/**
* 创建表
* @throws IOException
*/
@Test
public void createTable() throws IOException {
TableName tableName = TableName.valueOf("ns4:stu");
HTableDescriptor tabDesc = new HTableDescriptor(tableName);
HColumnDescriptor colDesc = new HColumnDescriptor("info");
colDesc.setMaxVersions(5);
tabDesc.addFamily(colDesc);
HBaseAdmin admin = new HBaseAdmin(conf);
admin.createTable(tabDesc);
admin.close();
}
/**
* 删除表
* @throws IOException
*/
@Test
public void dropTable() throws IOException {
HBaseAdmin admin = new HBaseAdmin(conf);
TableName tableName = TableName.valueOf("ns4:stu");
admin.disableTable(tableName);
admin.deleteTable(tableName);
admin.close();
}
/**
* 添加数据
* @throws IOException
*/
@Test
public void putData() throws IOException {
TableName tableName = TableName.valueOf("ns4:stu");
HTable table = new HTable(conf, tableName);
Put put = new Put(Bytes.toBytes("rk001"));
put.add(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("wangcuihua"));
put.add(Bytes.toBytes("info"), Bytes.toBytes("age"), Bytes.toBytes("18"));
table.put(put);
table.close();
}
/**
* 获取数据
* @throws IOException
*/
@Test
public void getData() throws IOException {
TableName tableName = TableName.valueOf("ns4:stu");
HTable table = new HTable(conf, tableName);
Get get = new Get(Bytes.toBytes("rk001"));
Result res = table.get(get);
for(Cell cell : res.rawCells()) {
System.out.println("f=" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("q=" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("r=" + Bytes.toString(CellUtil.cloneRow(cell)));
System.out.println("v=" + Bytes.toString(CellUtil.cloneValue(cell)));
System.out.println(cell.getTimestamp());
System.out.println();
}
// for(KeyValue kv : res.list()) {
// System.out.println("family :" + new String(kv.getFamily()));
// System.out.println("key :" + new String(kv.getKey()));
// System.out.println("qualifer :" + new String(kv.getQualifier()));
// System.out.println("row :" + new String(kv.getRow()));
// if(new String(kv.getQualifier()).equals("age"))
// System.out.println("value :" + Bytes.toInt(kv.getValue()));
// else
// System.out.println("value :" + new String(kv.getValue()));
// System.out.println();
// }
table.close();
}
/**
* 扫描
* @throws IOException
*/
@Test
public void scan() throws IOException {
TableName tableName = TableName.valueOf("ns4:stu");
HTable table = new HTable(conf, tableName);
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));
scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("age"));
ResultScanner resScanner = table.getScanner(scan);
for(Result res : resScanner) {
for(Cell cell : res.rawCells()) {
System.out.println("f=" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("q=" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("r=" + Bytes.toString(CellUtil.cloneRow(cell)));
System.out.println("v=" + Bytes.toString(CellUtil.cloneValue(cell)));
System.out.println(cell.getTimestamp());
System.out.println();
}
}
table.close();
}
/**
* 删除数据
* @throws IOException
*/
@Test
public void deleteData() throws IOException {
TableName tableName = TableName.valueOf("ns4:stu");
HTable table = new HTable(conf, tableName);
Delete delete = new Delete(Bytes.toBytes("rk001"));
table.delete(delete);
table.close();
}
}
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。