HBase是一种NoSQL数据库有别于传统关系型数据库,那么在Hadoop体系中为什么要引入HBase?HBase的特点又是什么呢?来康康以下内容吧。。。
1.HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。它是一个开源项目,是横向扩展的。 HBase是一个数据模型,类似于谷歌的大表设计(Big Table),可以提供快速随机访问海量结构化数据。 它利用了Hadoop的文件系统(HDFS)提供的容错能力。 它是Hadoop的生态系统,提供对数据的随机实时读/写访问,是Hadoop文件系统的一部分。 人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。 HBase在Hadoop的文件系统之上,并提供了读写访问。
2.Hbase的工作图
3.HBase 和 HDFS的区别
| HDFS | HBase |
| HDFS是适于存储大容量文件的分布式文件系统。 | HBase是建立在HDFS之上的数据库 |
| HDFS不支持快速单独记录查找。 | HBase提供在较大的表快速查找 |
| 它提供了高延迟批量处理;没有批处理概念。 | 它提供了数十亿条记录低延迟访问单个行记录(随机存取)。 |
| 它提供的数据只能顺序访问 | HBase内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找 |
HBase线性可扩展。 它具有自动故障支持。 它提供了一致的读取和写入。 它集成了Hadoop,作为源和目的地。 客户端方便的Java API。 它提供了跨集群数据复制。
5.HBase的应用点
Apache HBase曾经是随机,实时的读/写访问大数据。 它承载在集群普通硬件的顶端是非常大的表。 HBase的应用 HBase使用于当我们需要提供快速随机访问的数据。 很多公司,如Facebook,Twitter,雅虎,和Adobe内部都在使用HBase
二.HBase的存储机制
1.HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase: 表是行的集合。 行是列族的集合。 列族是列的集合。 列是键值对的集合 这里的列式存储或者说面向列,其实说的是列族存储,HBase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
2.HBase数据模型
hbase表模型的要点
1、一个表,有表名
2、一个表可以分为多个列族(不同列族的数据会存储在不同文件中)
3、表中的每一行有一个“行键rowkey”,而且行键在表中不能重复
4、表中的每一对kv数据称作一个cell
5、hbase可以对数据存储多个历史版本(历史版本数量可配置)
6、整张表由于数据量过大,会被横向切分成若干个region(用rowkey范围标识),不同region的数据也存储在不同文件中
7、hbase会对插入的数据按顺序存储: 要点一:首先会按行键排序 要点二:同一行里面的kv会按列族排序,再按k排序
3.Hbase的表结构
Row Key(Rowide)行键
Row key是用来表示唯一一行记录的主键,
Row key 行键可以是任意字符串 Columns Family 列族 列簇:HBase表中的每个列,都归属于某个列族,必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math 都属于courses这个列族。
Cell 列 Hbase表中唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存储. Time Stamp 时间戳 每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整型。时间戳可以由HBASE(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显示赋值。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面
4.HBase 和 RDBM(关系型数据库)的比较
| 不同点 | HBase | RDBMS |
| 数据类型 | Bytes | 丰富的数据类型 |
| 数据操作 | 简单增删查改 | 丰富的SQL支持 |
| 存储模式 | 列存储 | 行存储 |
| 数据保护 | 保留 | 替换 |
| 可伸缩 | 好 | 差 |
| 吞吐量 | 百万查询/每秒 | 数千查询/美秒 |
| 索引 | 只支持Row-key | 支持 |
三、HBase系统架构体系图



