HBase是一个分布式、面向列的开源数据库,实现语言为Java,它是Apache软件基金会Hadoop项目的子项目,运行于HDFS文件系统之上。HBase起源于2006年Chang等所撰写的Google论文《Bigtable:一个结构化数据的分布式存储系统》。就像Bigtable利用了Google文件系统(Google File System)所提供的分布式数据存储一样,HBase在Hadoop HDFS之上提供了类似于Bigtable的能力,可以存储海量稀疏的数据,并具备一定的容错性、高可靠性、高性能、面向列及可伸缩的特点。
Apache HBase最初是Powerest公司为了处理自然语言搜索产生的海量数据而开展的项目,具体的发展历程如图3-4所示。HBase不同于一般的关系型数据库,它是一个适合于非关系型数据存储的数据库,且是基于列而不是基于行的模式。HBase应用十分广泛,常见的应用场景有互联网搜索引擎数据存储、审计日志系统、实时系统及消息中心等方面。
·图3-4 HBase发展历史
HBase的逻辑视图如图3-5所示。
·图3-5 HBase逻辑视图
HBase的基本概念如下。
· Row Key:格式为字节数组(Byte[]),是表中每条记录的主键,方便快速查找。
· Column Family:格式为字符串(String),列簇,包含一个或者多个相关列。
· Column:格式为字符串(String),属于某一个Column Family,每条记录可动态添加。
· Version Number:格式为长整形(Long),默认值是系统时间戳,可由用户自定义。
· Value(Cell):格式为字节数组(Byte[]),是存储的数据。
HBase的逻辑架构与基本组件如图3-6所示。
·图3-6 HBase逻辑架构与基本组件
Hbase的部署架构如图3-7所示。
·图3-7 HBase部署架构
HBase命令行支持一些常用命令,用于操作HBase表结构以及数据。
· 查看表:List。
· 创建表:create't1',{NAME =>'f1',VERSIONS => 2},{NAME =>'f2',VERSIONS => 2}。
· 删除表:disable't1'
和drop't1'。
· 查看表结构:describe't1'。
· 修改表:具体格式如下。
· 分配权限:grant'test','RW','t1'。
· 添加数据:put't1','rowkey001','f1:col1','value01'。
· 查询:get't1','rowkey001','f1:col1'。
· 扫描表:scan't1',{LIMIT=>5}。
· 查询表中的数据行数:count't1',{INTERVAL => 100,CACHE => 500}。
· 删除行中的某个列值:delete't1','rowkey001','f1:col1'。
· 删除表中的所有数据:truncate't1'。