1、历史背景
-
产生原因
-
内因
-
hadoop之mapreduce/hdfs/hive等适合做批量数据处理,且只能以顺序方式访问数据。
-
-
外因
-
现实开发应用场景中,经常需要海量数据场景下的实时数据随机访问的需求,hadoop作为大数据的承载和计算平台应该予以满足。
-
-
2、hbase概述
-
hbase介绍
-
hadoop database的简称
-
hbase是一个数据模型,属于hadoop生态系统的一部分,提供对海量数据的随机实时读/写访问。
-
构建在hadoop之hdfs之上,分布式面向列的数据库
-
参考谷歌的bigtable数据库设计,拥有hdfs的分块存储、冗余、容错的优良特性。
-
完全开源、优秀的横向扩展性。
-
-
hbase与hdfs对比说明
HDFS |
HBase |
适于存储大文件的分布式文件系统 |
建立在HDFS之上的数据库 |
不支持快速单独记录查找,即顺序访问 |
提供在较大的表快速查找,即随机访问,也可以顺序访问 |
批量任务处理,吞吐量高时延高、实时性差 |
提供了亿级记录低延迟访问任意行记录,即随机存取 (原因:内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。) |
-
应用场景
-
高并发、简单条件、随机查询
-
不善长join类操作,新版本正在陆续支持与升级中
-
-
半结构化、非结构化数据存储
-
-
应用案例
-
数据采集结果存储、海量数据实时查询等项目开发当中使用非常广泛。
-
国外的facebook、google、yahoo!,国内的互联网中大型公司、BAT内部均有广泛使用。
-
-
hbase数据模型
-
重要概念
-
命名空间(namespace)
-
类比于关系型数据库中的不同的Database数据库。
-
利用命名空间,在多租户场景下可做到更好的资源和数据隔离。
-
-
表(table)
-
类比于rdb中的表
-
以"表"为单位组织数据,表由多行组成
-
-
行(row)
-
行由一个RowKey和多个列族组成,一个行有一个RowKey作为行的唯一标识。
-
-
列族(column family,简称CF)
-
每一行由若干列族组成,每个列族下可包含多个列。
-
列族是列共性的一些体现,如baseInfo列族和addressInfo列族,baseInfo可以包括name(名字),age(年龄),gender(性别)属性列,而addressInfo可以包括province(省份),city(市), email(邮箱)等属性列。
-
物理上,同一列族的数据存储在一起的。
-
-
列限定符(column qualifier)
-
列由列族和列限定符唯一指定,像如上的name、age即是baseInfo列族的列限定符。
-
-
单元格(cell)
-
单元格由RowKey、列族、列限定符唯一定位,单元格之中存放一个值(Value)和一个版本号。
-
-
时间戳(timestamp)
-
即为版本号,来标识一个单元格的数据的最新的插入或是修改时间
-
单元格内不同版本的值按时间倒序排列,最新的数据排在最前面
-
-
-
核心设计
-
面向列(列族)定义、列(列族)存储的数据库,其数据库也称为空间namespace。
-
表的基本组成单元是行,每行有个唯一标识称为rowKey,表中数据按rowKey进行字典序排序存储。
-
一个表有多个列族以及每一个列族可以有任意数量的列,后续新增列的值连续地存储在磁盘上。
-
表中的每个单元格值都具有时间戳,来标识该单元格的最后插入或更新时间。
-
-
简易逻辑说明
-
表是行的集合
-
行是列族的集合
-
列族是列的集合
-
列是键值对的集合
-
-
hbase数据表模板
-
Rowid |
Column Family |
Column Family |
|||
|
column1 |
column2 |
column3 |
column1 |
column2 |
rowkey1 |
|
|
|
|
|
rowkey2 |
|
|
|
|
|
rowkey3 |
|
|
|
|
|
-
hbase数据表样例(学生信息表)
Rowid |
baseInfo |
addressInfo |
|||
|
name |
age |
gender |
province |
city |
20190901 |
张一 |
21 |
男 |
河北省 |
石家庄市 |
20190902 |
张二 |
22 |
女 |
河南省 |
郑州市 |
20190903 |
张三 |
21 |
男 |
内蒙古 |
赤峰市 |