自 1970 年以来,关系数据库是用于数据存储和维护有关问题的解决方案。
大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像 Hadoop 的解决方案。
Hadoop 使用分布式文件系统,用于存储大数据,并使用 MapReduce 分布式计算来处理。
Hadoop 擅长于存储各种格式的庞大的数据,任意的格式甚至非结构化的处理。
Hadoop 的限制:
Hadoop 只能执行批量处理,并且只以顺序方式访问数据。
这意味着必须搜索整个数据集,即使是最简单的搜索工作。当处理结果在另一个庞大的数据集,也是按顺序处理一个巨大的数据集。在这一点上,一个新的解决方案,需要访问数据中的任何点(随机访问)单元。
Hadoop 随机存取数据库:
应用程序,如 HBase,Cassandra,CouchDB,Dynamo 和 MongoDB 都是一些存储大量数据和以随机方式访问数据的数据库。
总结:
(1)海量数据量存储成为瓶颈,单台机器无法负载大量数据;
(2)单台机器 IO 读写请求成为海量数据存储时候高并发大规模请求的瓶颈;
(3)随着数据规模越来越大,大量业务场景开始考虑数据存储横向水平扩展,使得存储服务可以增加/删除,而目前的关系型数据库更专注于一台机器。
官网:http://hbase.apache.org/
1、Apache HBase™ is the Hadoop database, a distributed, scalable, big data store.
2、Use Apache HBase™ when you need random, realtime read/write access to your Big Data.
3、This project’s goal is the hosting of very large tables – billions of rows X millions of columns – atop clusters of commodity hardware.
4、Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google’s Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.
**
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、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列。
(1)半结构化或非结构化数据:
对于数据结构字段不够确定或杂乱无章很难按一个概念去进行抽取的数据适合用 HBase。而且 HBase 是面向列的,HBase 支持动态增加字段。
(2)记录非常稀疏:
RDBMS 的行有多少列是固定的,为 null 的列浪费了存储空间。而 HBase 为 null 的 Column 是不会被存储的,这样既节省了空间又提高了读性能。
(3)多版本数据:
对于需要存储变动历史记录的数据,使用 HBase 就再合适不过了。HBase 根据 Row key 和 Column key 定位到的 Value 可以有任意数量的版本值。
(4)超大数据量:
当数据量越来越大,RDBMS 数据库撑不住了,就出现了读写分离策略,通过一个 Master 专门负责写操作,多个 Slave 负责读操作,服务器成本倍增。随着压力增加,Master 撑不住了,这时就要分库了,把关联不大的数据分开部署,一些 join 查询不能用了,需要借助中间层。随着数据量的进一步增加,一个表的记录越来越大,查询就变得很慢,于是又得搞分表,比如按 ID 取模分成多个表以减少单个表的记录数。经历过这些事的人都知道过程是多么的折腾。采用 HBase 就简单了,只需要加机器即可,HBase 会自动水平切分扩展,跟 Hadoop 的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce)。
上节学习内容:Hive 高级应用(四)之 Hive 优化策略
下节学习内容:HBase 表结构逻辑视图