hadoop之Hbase简介
Posted youbingchen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop之Hbase简介相关的知识,希望对你有一定的参考价值。
HBASE的发展
从bigtable讲起
bigtable 是一个分布式存储系统
- 利用mapreduce分布式并行计算模型处理海量数据
- 使用分布式文系统GFS作为底层数据存储
- 采用Chubby提供协同服务管理
- 扩展到PB级别的数据和上千台机器,具有广泛应用性, 可扩展性,高性能和高应用的特点
- 很多项目都存储在BigTable中,包括搜索、财经、地图、社交网络Orkut、视频共享网站YouTube。
HBase
Hbase是一个可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌HBase的开源实现,主要用来存储非结构化和半结构化的松散数据。Hbase的目标是处理非常庞大的表,通过水平扩展方式,利用廉价计算机集群处理超过10亿行的数据和数百位列组成的数据表。
Hbase和Bigtable之间关系
Bigtable | HBase |
---|---|
文件系统 | GFS |
海量数据处理 | MapReduce |
协同服务管理 | Chubby |
为什么需要HBase
- hadoop可以很好解决大规模数据的离线批量处理的问题,但是由于MapReduce编程框架的高延迟数据处理机制,使得Hadoop无法满足大规模数据实时处理的应用要求
- HDFS面向批量访问方式,不是随机访问方式
- 传统的通用关系型数据库无法应对数据规模剧增导致的系统扩展性和性能的问题
- 传统关系型数据块在数据结构变化时一般需要停机维护,空列浪费存储空间
Hbase 与传统数据库的区别
- 数据类型:关系系数据库采用关系模型,具有丰富的数据类型和存储方式,Hbase则采用了更简单的数据模型,把数据存储为未经解释的字符串
- 数据操作:关系数据库包含了丰富的操作,其中涉及到了复杂的多表链接,Hbase操作则不存在复杂的表与表之间的关系,只有简单的插入,查询、删除、清空,从而避免了复杂表之间的关系
- 存储模式:关系型数据库是基于行模式存储的,Hbase是基于列的,每个列有几个文件保存,不同的列族的文件是分离的。
- 数据索引:关系数据库针对不同的列构造复杂的索引,以提高数据访问的性能,Hbase只有一个索引-行键,通过巧妙的设计,Hbase中的所有访问的办法或是通过行键访问和扫描,使得整个系统不会慢下来
- 数据维护:在关系型数据库,更新操作 会用最新的当前值去替换原来记录的旧值,旧值就不会存在,而在HBase中执行更新操作,并不会删除旧的版本,而是生成一个新的版本,旧的版本依然存在
- 可伸缩性:关系型数据库不论在横向扩展和纵向扩展难度比较大, Hbase和BigTable这些分布式数据库就是为了实现灵活的水平扩展,能够轻易的通过集群中增加或减少硬件数量来实现性能伸缩
HBase 访问接口
类型 | 特点 | 场合 |
---|---|---|
Native Java API | 最高规和高效的访问方式 | 适合Hadoop和MapReduce作业并行批处理HBase表数据 |
HBase Shell | Hbase 的命令行工具,最简单的接口 | 适合HBase管理使用 |
Thrift Gateway | 使用Thrift序列化技术,支持C++、Python、php等多种语言 | 适合其他异构系统在线访问 HBase表数据 |
REST Gateway | 解除了语言的限制 | 支持REST风格的HTTP API访问HBase |
Pig | 使用Pig Latin流式编程语言来处理Hbase中的数据 | 适合数据统计 |
Hive | 简单 | 当需要以类似SQL语言方式访问Hbase的时候 |
HBase数据模型
- Hbase 是一个稀疏、多维度、排序的映射表,这表的索引是行键、列族、列限定符和时间戳
- 每个值是一个未经解释的字符串,没有数据类型
- 用户在表中存储数据,每一行都有一个可排序的行键和任意多的列
- 表在水平方向由一个或者多个列族组成,一个列族可以包含任意多个列,同一个列族里面的数据都存储在一起
- 列族支持动态扩展,可以很轻松地添加一个列族或列,无需预定义列的数量以及类型,所有的列均以字符串形式存储,用户自行进行数据类型转换
- Hbase中执行更新操作时,并不会删除数据的旧版本,而是生成一个新的版本,就的版本仍然保留(这与HDFS只允许修改的特性相关)
- Hbase需要通过行键、列族、列限定符合时间戳来确定一个单元格。
HBase是个键值数据库,物理存储是按列存储,按列族分开存
Hbase功能组件
+ HBase的实现包括三个主要的功能组件
- 库函数:链接到每个客户端
- 一个master服务器
- 许多个Region服务器
- 主服务器master负责管理和维护HBase表的分区信息,维护Region服务器列表,分配Region,负载均衡
- Region服务器负责存储和维护分配给自己region,处理来自客户端的读写请求
- 客户端并不是直接从master主服务器上读取数据,而是获得Region的存储位置信息之后,直接从Region服务器上读取数据
- 客户端并不依赖Master,而是通过Zookeeper来获得Region的位置信息,大多数的客户端甚至从来不和Master通信,这样的设计使得Master负载很小。
表和Region的关系
Region是如何定位
这个一点跟HDFS中的master确定datanode的位置不一样
- 元数据表又称META表,存储了Region和Region服务器的映射关系
- 当HBase表很大,META表也会被分裂成多个Region
- 根数据表又称Root表,记录所有元数据的具体位
- Root表只有一个Region,名字在程序中被写死了
- Zookeeper文件记录了ROOT表的位置
所有的META表都存储在内存中,寻址过程客户端只需要访问zookeeper,不需要连接master服务器
Hbase架构
Hbase之上构建SQL引擎
- Hive整合HBase
- Phoenix
Hbase二级索引
Hbase 只有一个针对行键索引
- 通过单个行键访问
- 通过一个行键的区间访问
- 全表扫描
使用其他产品为Hbase行键提供索引功能
- Hindex 二级索引
- Hbase+Redis
- Hbase+Solr
以上是关于hadoop之Hbase简介的主要内容,如果未能解决你的问题,请参考以下文章