数据存储(大数据)(Hbase概述、特点、应用场景、基本操作)

概述: HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表 。
数据存储(大数据)(Hbase概述、特点、应用场景、基本操作)
文章图片


数据存储(大数据)(Hbase概述、特点、应用场景、基本操作)
文章图片



特点及局限:
特点:(1)大:一个表可以有数十亿行,上百万列;
(2)无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;
(3)面向列:面向列(族)的存储和权限控制,列(族)独立检索;?
(4)稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;
(5)数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;
(6)数据类型单一:Hbase中的数据都是字符串,没有类型。
局限:读写访问均是非常简单的操作。提供了get和scan两种方式,也不存在多表联合查询的问题。
应用场景: (1)半结构化或非结构化数据:对于数据结构字段不够确定或杂乱无章很难按一个概念去进行抽取的数据适合用HBase。以上面的例子为例,当业务发展需要存储author的email,phone,address信息时RDBMS需要停机维护,而HBase支持动态增加.
(2)记录非常稀疏,HBase为null的Column不会被存储,这样既节省了空间又提高了读性能。
(3)多版本数据。
(4)超大数据量:只需要加机器即可,HBase会自动水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce)。
基本操作: 创建表:create 'member','member_id','address','info'
【数据存储(大数据)(Hbase概述、特点、应用场景、基本操作)】查询表信息:describe 'member'
drop表:删除表之前需要先将表disable再drop(新版本不用disable)
disable 'tmp_table'
drop 'tmp_table'
判断表是否enable
is_enabled 'member'
判断表是否disabled
is_disabled 'member'
获取一个id,一个列族中一个列的所有数据
格式:get 表名 row_key cf:column
get 'member','luogankun','info:age'
COLUMNCELL
info:agetimestamp=1409122962328, value=https://www.it610.com/article/27
更新一条记录
格式: put 表名 row_key cf:column value
将luogankun的年龄改成18
put 'member','luogankun','info:age','18'
get 'member','luogankun','info:age'
COLUMNCELL
info:agetimestamp=1409123175384, value=https://www.it610.com/article/18
通过timestamp来获取指定版本的数据
格式: get 表名 row_key {COLUMN=>'cf:column',TIMESTAMP=>xxxxxx}
get 'member','luogankun',{COLUMN=>'info:age',TIMESTAMP=>1409122962328}
COLUMNCELL
info:agetimestamp=1409122962328, value=https://www.it610.com/article/27

get 'member','luogankun',{COLUMN=>'info:age',TIMESTAMP=>1409123175384}
COLUMNCELL
info:agetimestamp=1409123175384, value=https://www.it610.com/article/18
查询表中有多少行
格式:count 表名
count 'member'
将整张表清空
格式: truncate 表名
truncate 'member'
其他
put ’

’,’row1’,’’,’
put 'emp','1','personaldata:name','raju'

get ’
’,’row1’
get 'emp', '1'

get 'table name', ‘rowid’, {COLUMN => ‘column family:column name ’}
get 'emp', 'row1', {COLUMN=>'personal:name'}

delete ‘
’, ‘’, ‘’, ‘
’, ‘’,
deleteall 'emp','1'

    推荐阅读