1:start-all.sh
开启hadoop相关进程
2: start-hbase.sh
启动hbase
3: jps
查看启动的进程情况
3: hbase shell
进入hbase
4: list
显示所有表
http://localhost:16010/master-status
5: create ‘rg34’,’f1’,’f2’,’f3’
创建rg34表,f1,f2,f3为列族
6: describe ‘rg34’
查看表结构
7: scan ‘rg34’
查看表全部数据
8: put ‘rg34’,’h1’,’f1:r1’,’hello’
往表中插入一条数据
9: scan ‘rg34’
查看表全部数据
10: get ‘rg34’,’h1’,{COLUMN=>’f1:c1’}
通过列名查找数据
11: put ‘rg34’,’h1’,’f1:c1’,’hello1’
往表中插入一条数据
12: scan ‘rg34’
查看表全部数据
13: get ‘rg34’,’h1’,{COLUMN=>’f1:c1’}
通过列名查找数据
发现只有hello1的数据,但实际上hello数据并没有被覆盖,hello数据也被保存起来了,这两个方式查看表数据的时候只显示这些列的最新数据
14: scan ‘rg34’,{RAW=TRUE,VERSIONS=1}
查看隐藏的数据 1表示显示数据版本个数为1个版本
15: scan ‘rg34’,{RAW=TRUE,VERSIONS=2}
查看隐藏的数据 2表示显示数据版本个数为2个版本
16: delete ‘rg34’,’h1’,’f1:c1’
删除数据
17: scan ‘rg34’
查看表全部数据,发现hello数据出来了
18: scan ‘rg34’,{RAW=TRUE,VERSIONS=2}
hello1数据并没有被删除,因为hbase的数据通常是保存在HDFS上,而hdfs只允许新增或者追加数据文件,如果要删除的话要对整个文件进行替换,所以删除操作是对删除的数据打上标记
什么时候数据被真正删除?
具体操作:
当多个storefile进行major_compact全局合并时,就会真正对那些打标记的数据进行删除。
storefile:
因为hbase基于hdfs进行数据存储。为了提升效率,会有一个memstore、block cache对数据进行缓存,使用wal日志文件来防止内存数据丢失。但这些东西最终都会放到磁盘中的某个文件进行存储,这个磁盘文件就是storefile
手动实现major_compact:
先进行flush数据刷写,然后再进行major_compact ‘rg34’
19: flush ‘rg34’20: major_compact ‘rg34’
21: scan ‘rg34’,’h1’,’f1:c1’
发现标记要删除的数据不见了
22: disable ‘rg34’
使表不可用
23: drop ‘rg34’
删除表
24: list
显示全部表
java程序操作hbase
1:createTable("rg34"); 创建表rg34
2:insertData("rg34"); 往rg34表插入数据f1 c1 aaa
3:insertData("rg34"); 往rg34表插入数据f1 c2 bbb
4:QueryAll("rg34"); 查询rg34全部数据
5:QueryByCondition1("rg34","Hbase"); 根据行键查询数据
6:getCellData("rg34","Hbase","f1","c2"); 根据行键、列族、列名查询数据
7:deleteRow("rg34","Hbase"); 删除Hbase行
8:deleteColumnFamily("rg34","f1"); 删除f1列族
9:dropTable("rg34"); 删除rg34表
高可靠性、高性能、列存储、可伸缩、扩展性强、实时读写的分布式数据库系统,海量存储、列式存储、极易扩展、高并发、稀疏灵活
适用:
高吞吐量
在大规模数据集中进行很好性能的随机访问(按列)
非结构化和半结构化的数据
不适用:
1 瞬间写入量很大,数据库不好支撑或需要很高成本支撑的场景。
2 数据需要长久保存
3 HBase不适用有join,多级索引,表关系复杂的数据模型
HBase包含3个重要组件:
ZooKeeper、HMaster、RegionServer。
ZooKeeper为整个HBase集群提供协助的服务(信息传输),HMaster主要用于监控和操作集群中的所有RegionServer,HRegionServer主要用于服务和管理分区(regions)。