HBase是基于HDFS的数据存储,它建立在HDFS文件系统上面,利用了HDFS的容错能力,内部还有哈希表并利用索引,可以快速对HDFS上的数据进行随时读写功能。
Hadoop在已经有一个Hive+MapReduce结构的数据读写功能,为什么还要HBase呢?我们在使用Hive的过程中也发现,MapReduce的过程很慢,不适合实时的读写访问,更多的时候是进行线下的访问。但在实际应用过程中,我们需要对大数据进行实时的读写,这时候HBase就派上用场。
HBase使用场景:
HBase适合在瞬间写入量大,大量数据需要长期保存,并且数量会持续增长的场景。但在多级索引和关系复杂的数据模型,还有跨行事务场景也不适合HBase。
Zookeeper
HMaster
HRegionServer
Column Family是HBase的存储单元,所以相同特性的Column放在一个Column Family更高效。
HStore
HRegion
HLog
找到zkServer.sh启动Zookeeper
zkServer.sh start
启动HBase
start-hbase.sh
连接集群
hbase shell
创建表
create 'user','base_info'# 第一个为表名,第二个为列族
删除表
disable 'user'
drop 'user'
创建数据库
create_namespace 'test' #test为数据库名
展示所有数据库
list_namespace
显示表
list
插入数据
put ‘表名’,‘rowkey的值’,’列族:列标识符‘,’值‘
put 'user','rowkey_10','base_info:username','Tom'
查询表中所有数据
scan 'user' # 很少使⽤全表查询 scan会加上⼀些条件限制
Scan查询中添加限制条件
scan '名称空间:表名', {COLUMNS => ['列族名1', '列族名2'], LIMIT => 10, STARTROW =>'起始的rowkey'}
scan查询添加过滤器
ROWPREFIXFILTER rowkey 前缀过滤器
scan 'user', {ROWPREFIXFILTER=>'rowkey_22'}
查询某个rowkey的数据
get 'user','rowkey_16'
删除表中的数据
delete 'user', 'rowkey_16', 'base_info:username'
清空数据
truncate 'user'
指定显示多个版本
get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>2}
修改可以显示的版本数量
alter 'user',NAME=>'base_info',VERSIONS=>10
通过TIMERANGE 指定时间范围
scan 'user',{COLUMNS => 'base_info', TIMERANGE => [1558323139732,1558323139866]}
get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>2,TIMERANGE=> [1558323904130, 1558323918954]}
通过时间戳过滤器 指定具体时间戳的值
scan 'user',{FILTER => 'TimestampsFilter (1558323139732, 1558323139866)'}
get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>2,FILTER =>'TimestampsFilter (1558323904130, 1558323918954)'}
获取最近多个版本的数据
get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>10}
通过指定时间戳获取不同版本的数据
get 'user','rowkey_10',
{COLUMN=>'base_info:username',TIMESTAMP=>1558323904133}