好程序员大数据学习路线hbase快速入门

好程序员大数据学习路线 hbase 快速入门 Hbase 简介

1.Hbase 是什么

Apache HBase是Hadoop数据库,一个分布式的、可伸缩的大数据存储。

当您需要对大数据进行随机的、实时的读 /写访问时,请使用Apache HBase。这个项目的目标是在商品硬件的集群上托管非常大的表——数十亿行百万列的列。Apache HBase是一个开源的、分布式的、版本化的、非关系的数据库,它模仿了Google的Bigtable:一个结构化数据的分布式存储系统,就像Bigtable利用Google文件系统提供的分布式数据存储一样,Apache HBase在Hadoop和HDFS上提供了类似于bigtable的功能

1).Hbase 的特点

大:一个表可以有数十亿行,上百万列;

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

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

稀疏:对于空( null)的列,并不占用存储空间,表可以设计的非常稀疏;

数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;

数据类型单一: Hbase中的数据都是字符串,没有类型。

2).Hbase 与关系型数据库的对比


传统行式数据库:

数据是按行存储的

没有索引的查询使用大量 I/O

建立索引和物化视图需要花费大量时间和资源

面向查询的需求,数据库必须被大量膨胀才能满足性能要求

列式数据库

数据是按列存储 -每一列单独存放

数据即是索引

指访问查询涉及的列 -大量降低系统I/O

每一列由一个线索来处理 -查询的并发处理

  数据类型一致,数据特征相似 -高效压缩

3).Hbase HDFS 的对比


两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点;

HDFS适合批处理场景

不支持数据随机查找

不适合增量数据处理

不支持数据更新

2.Hbase 的体系结构


1).Client

  HBase Client 使用 HBase的 RPC 机制与 HMaster HRegionServer 进行通信,对于管理类操作, Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC。

2).Zookeeper

 Zookeeper Quorum中除了存储了 -ROOT- 表的地址和 HMaster 的地址, HRegionServer也会把自己以 Ephemeral 方式注册到  Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也避免了HMaster的单点问题。

3).Hmaster
  • 管理用户对 Table的增、删、改、查操作;
  • 管理 HRegion Server的负载均衡,调整Region分布;
  • Region Split后,负责新Region的分配;
  • HRegion Server停机后,负责失效HRegion Server 上的Regions迁移。
4).Region


  当表的大小超过设置值的时候, HBase 会自动地将表划分为不同的区域,每个区域包含所有行的一个子集。对用户来说,每个表是一堆数据的集合,靠主键来区分。从物理上来说,一张表被拆分成了多块,每一块就是一个 Region。我们用表名 + 开始 / 结束主键,来区分每一个 Region,一个Region会保存一个表里面某段连续的数据,从开始主键到结束主键,一张完整的表格是保存在多个Region上面。

5).HRegion Server

  所有的数据库数据一般是保存在 Hadoop HDFS 分布式文件系统上面,用户通过一系列 HRegion Server获取这些数据,一台机器上面一般只运行一个HRegion Server,且每一个区段的HRegion也只会被一个HRegion Server维护。下面是HRegion Server数据存储关系图。


  HRegion Server 主要负责响应用户 I/O 请求,向 HDFS文件系统中读写数据,是 HBase 中最核心的模块。

  HRegion Server 内部管理了一系列 HRegion对象,每个 HRegion 对应了 Table 中的一个 Region Region 中由多个 Store 组成。每个 Store 对应了 Table中的一个 Column Family 的存储,可以看出每个 Column Family 其实就是一个集中的存储单元,因此最好将具备共同 IO特性的column放在一个Column Family中,这样最高效。

   Store 存储是 HBase存储的核心了,其中由两部分组成,一部分是 MemStore ,一部分是 StoreFiles MemStore Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个 StoreFile (底层实现是 HFile ),   StoreFile文件数量增长到一定阈值,会触发 Compact 合并操作,将多个 StoreFiles 合并成一个 StoreFile ,合并过程中会进行版本合并和数据删除,因此可以看出 HBase 其实只有增加数据,所有的更新和删除操作都是在后续的 compact 过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了 HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个 StoreFile 大小超过一定阈值后,会触发 Split 操作,同时把当前 Region Split 2 Region ,父 Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer 上,使得原先1个Region的 压力得以分流到 2个Region上。下图描述了Compaction和Split的过程。


     Compaction和Split的过程

  在理解了上述 HStore的基本原理后,还必须了解一下 HLog 的功能,因为上述的 HStore在系统正常工作的前提下是没有问题的,但是在分布式系统环境中,无法避免系统出错或者宕机,因此一旦HRegion Server意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。每个HRegion Server中都有一个HLog对象,HLog是一个实现 Write Ahead Log 的类,在每次用户操作写入 MemStore 的同时,也会写一份数据到 HLog 文件中( HLog文件格式见后续), HLog 文件定期会滚动出新的,并删除旧的文件(已持久化到 StoreFile中的数据)。当 HRegion Server 意外终止后, HMaster 会通过 Zookeeper 感知到, HMaster首先会处理遗留的  HLog 文件,将其中不同 Region Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取到这些region的HRegion Server在Load Region的过程中,会发现有历史HLog需要处理,因此会 Replay HLog 中的数据到 MemStore中,然后flush到StoreFiles,完成数据恢复。

6).Hbase 的存储格式

 HBase中的所有数据文件都存储在Hadoop HDFS文件系统上为例,主要包括上述提出的两种文件类型:HFile, HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile。HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File。

7).ROOT 表和 META

  用户表的 Regions元数据被存储在.META.表中,随着Region的增多,.META.表中的数据也会增大,并分裂成多个Regions。为了定位.META.表中各个Regions的位置,把.META.表中所有Regions的元数据保存在-ROOT-表中,最后由ZooKeeper记录-ROOT-表的位置信息。所有客户端访问用户数据前,需要首先访问ZooKeeper获得-ROOT-的位置,然后访问-ROOT-表获得.META.表的位置,最后根据.META.表中的信息确定用户数据存放的位置,如下图所示。


 -ROOT-表永远不会被分割,它只有一个Region,这样可以保证最多需要三次跳转就可以定位任意一个Region。为了加快访问速度,.META.表的Regions全部保存在内存中。客户端会将查询过的位置信息缓存起来,且缓存不会主动失效。如果客户端根据缓存信息还访问不到数据,则询问只有相关.META.表的Region服务器,试图获取数据的位置,如果还是失败,则询问-ROOT-表相关的.META.表在哪里。最后,如果前面的信息全部失效,则通过ZooKeeper重新定位Region的信息。所以如果客户端上的缓存全部是失效,则需要进行6次网络来回,才能定位到正确的Region。


8).MapReduce On HBase

  HBase系统上运行批处理运算,最方便和实用的模型依然是MapReduce,如下图:


 HBase Table和Region的关系,比较类似HDFS File和Block的关系,HBase提供了配套的TableInputFormat和TableOutputFormat API,可以方便的将HBase Table作为Hadoop MapReduce的Source和Sink,对于MapReduce Job应用开发人员来说,基本不需要关注HBase系统自身的细节。

3.HBase 数据模型


  以关系型数据的思维下会感觉,上面的表格是一个 5列4行的数据表格,但是在HBase中这种理解是错误的,其实在HBase中上面的表格只是一行数据;

1).Row Key:

 – 决定一行数据的唯一标识

 – RowKey是按照字典顺序排序的。

 – Row key最多只能存储64k的字节数据。

2).Column Family 列族( CF1 CF2 CF3 )  & qualifier 列:

 – HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema) 定义的一部分预先给出。如create ‘test’, ‘course’;

 – 列名以列族作为前缀,每个“列族”都可以有多个列成员(column,每个列族中可以存放几千~上千万个列);如 CF1:q1, CF2:qw,

  新的列族成员(列)可以随后按需、动态加入, Family下面可以有多个Qualifier,所以可以简单的理解为,HBase中的列是二级列,

  也就是说 Family是第一级列,Qualifier是第二级列。两个是父子关系。

 – 权限控制、存储以及调优都是在列族层面进行的;

 – HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。

 – 目前为止HBase的列族能能够很好处理最多不超过3个列族。

3).Timestamp 时间戳:

 – 在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间 戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,

  最新的数据版本排在最前面。

 – 时间戳的类型是64位整型。

 – 时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫 秒的当前系统时间。

 – 时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突, 就必须自己生成具有唯一性的时间戳。

4).Cell 单元格:

 – 由行和列的坐标交叉决定;

 – 单元格是有版本的(由时间戳来作为版本);

 – 单元格的内容是未解析的字节数组(Byte[]),cell中的数据是没有类型的,全部是字节码形式存贮。

 • 由{row key,column(= +),version}唯一确定的单元。

4.Hbase 应用介绍
  • –列族结构经常调整
  • –高并发写入
  • –结构化数据、半结构化数据存储
  • –Key-Value存储
  • –有序存储
  • –固定集合(多版本)
  • –定时删除记录(TTL)


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69913892/viewspace-2652097/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69913892/viewspace-2652097/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值