Hbase学习Hbase基础介绍

一、产生背景

自 1970 年以来,关系数据库用于数据存储和维护有关问题的解决方案。大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像 Hadoop 的解决方案。Hadoop 使用分布式文件系统,用于存储大数据,并使用 MapReduce 来处理。Hadoop 擅长于存储各种格式的庞大的数据,任意的格式甚至非结构化数据的处理。

Hadoop 的限制

Hadoop 只能执行批量处理,并且只以顺序方式访问数据。这意味着必须搜索整个数据集,即使是最简单的搜索工作。当处理结果在另一个庞大的数据集,也是按顺序处理一个巨大的数据集。在这一点上,一个新的解决方案,需要访问数据中的任何点(随机访问)单元。

Hadoop 随机存取数据库

应用程序,如 HBase,Cassandra,CouchDB,Dynamo 和 MongoDB 都是一些存储大量数据和 以随机方式访问数据的数据库。

总结:

1、海量数据量存储成为瓶颈,单台机器无法负载大量数据。

2、单台机器 IO 读写请求成为海量数据存储时候高并发大规模请求的瓶颈

3、随着数据规模越来越大,大量业务场景开始考虑数据存储横向水平扩展,使得存储服务可以增加 / 删除,而目前的关系型数据库更专注于一台机器

二、Hbase 简介

Hbase 是 BigTable(源码使用 Java 编写)版本。是 Apache Hadoop 的数据库,是建立在 HDFS 之上,被设计用来提供高可靠性、高性能、、列存储、可伸缩、多版本的 NoSQL 的分布式数据存储系统,实现对大型数据的实时,随机的读写访问。

Hbase 依赖于 HDFS 做底层的数据存储,BigTable 依赖于 Google GFS 做数据存储

Hbase 依赖于 Mapreduce 做数据计算,BigTable 依赖于 Google MapReduce 做数据计算

HBase 依赖于 Zookeeper 做服务协调,BigTable 依赖 Google Chubby 做服务协调

三、关系型数据库和非关系型数据库的典型代表

NoSQL:Hbase、redis、Mongdb

RDBMS:mysql,oracle、sqlserver,db2

四、Hbase 这个 NOsql 数据库的要点

1、它介于 NoSQL 和 RDBMS 之间,仅能通过主键(rowkey)和主键的 range([startkey,endkey)) 来检索数据

2、Hbase 查询数据功能很简单,不支持 join 等复杂操作

3、不支持复杂的事务,只支持行级事务(可以通过 hive 支持来实现多表 join 等复杂操作)

4、Hbase 中支持的数据类型:Byte[]  (底层所有数据的存储都是字节数组)

5、主要用来存储结构化数据和半结构化的松散数据。

6、列可以动态增加,并且列为空就不存储数据,节省存储空间

五、Hbase 中的表特点

1、大:一个表可以有上十亿行,上白袜列

2、面向列:面向列 (族) 的存储和权限控制,列 (簇) 独立检索。

3、稀疏:对于为空 (null) 的列,并不占用存储空间,因此,表可以设计的非常稀疏。

4、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一 张表中不同的行可以有截然不同的列

六、Hbase 表结构逻辑视图

初次接触 HBase,可能看到以下描述会懵:“基于列存储”,“稀疏 MAP”,“RowKey”,“ColumnFamily”。

其实没那么高深,我们需要分两步来理解 HBase, 就能够理解为什么 HBase 能够“快速地”“分布式地”处理“大量数据”了。

  1. 内存结构

  2. 文件存储结构

七、名词概念

假如我们有如下一张表

1、Rowkey 概念

Rowkey 的概念和 mysql 中的主键是完全一样,Hbase 使用 Rowkey 来唯一的区分某一行的数据。

由于 Hbase 只支持 3 中查询方式:

a、基于 Rowkey 的单行查询

b、基于 Rowkey 的范围扫描

c、全表扫描

因此,Rowkey 对 Hbase 的性能影响非常大,Rowkey 的设计就显得尤为的重要。设计的时候要兼顾基于 Rowkey 的单行查询也要键入 Rowkey 的范围扫描。rowkey 行键可以是任意字符串 (最大长度是 64KB,实际应用中长度一般为 10-100bytes),最好是 16。在 HBase 内部,rowkey 保存为字节数组。HBase 会对表中的数据按照 rowkey 排序 (字典顺序)