HBase 是 BigTable 的开源(源码使用 Java 编写)版本。是 Apache Hadoop 的数据库,是建 立在 HDFS 之上,被设计用来提供高可靠性、高性能、列存储、可伸缩、多版本的 NoSQL 的分布式数据存储系统,实现对大型数据的实时、随机的读写访问。
HBase 依赖于 HDFS 做底层的数据存储,BigTable 依赖 Google GFS 做数据存储 HBase 依赖于 MapReduce 做数据计算,BigTable 依赖 Google MapReduce 做数据计算 HBase 依赖于 ZooKeeper 做服务协调,BigTable 依赖 Google Chubby 做服务协调
NoSQL = NO SQL NoSQL = Not Only SQL:会有一些把 NoSQL 数据的原生查询语句封装成 SQL 比如 HBase 就有 Phoenix 工具
// 关系型数据库 和 非关系型数据库的典型代表:
NoSQL:hbase, redis, mongodb
RDBMS:mysql,oracle,sql server,db2
以下五点是 HBase 这个 NoSQL 数据库的要点:
① 它介于 NoSQL 和 RDBMS 之间,仅能通过主键(rowkey)和主键的 range 来检索数据 ② HBase 查询数据功能很简单,不支持 join 等复杂操作 ③ 不支持复杂的事务,只支持行级事务(可通过 hive 支持来实现多表 join 等复杂操作)。
④ HBase 中支持的数据类型:byte[](底层所有数据的存储都是字节数组) ⑤ 主要用来存储结构化和半结构化的松散数据。
结构化:数据结构字段含义确定,清晰,典型的如数据库中的表结构 半结构化:具有一定结构,但语义不够确定,典型的如 HTML 网页,有些字段是确定的(title), 有些不确定(table) 非结构化:杂乱无章的数据,很难按照一个概念去进行抽取,无规律性 与 Hadoop 一样,HBase 目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加 计算和存储能力。
HBase 中的表特点
1、大:一个表可以有上十亿行,上百万列
2、面向列:面向列(族)的存储和权限控制,列(簇)独立检索。
3、稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
4、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一 张表中不同的行可以有截然不同的列