HBase(一)概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013963380/article/details/74858423

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。


HBase简介

HBase是一个构建在HDFS上的分布式列存储系统;
HBase是基于Google BigTable模型开发的,典型的key/value系统;
HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;
从逻辑上讲,HBase将数据按照表、行和列进行存储。
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力


HBase的特点

  • 大:一个表可以有上亿行,上百万列。
  • 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。
  • 稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
  • 无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。
  • 数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。
  • 数据类型单一:HBase中的数据都是字符串,没有类型。

HBase数据模型

这里写图片描述

如上图是HBase的逻辑视图,其中会涉及一些HBase基本概念:

  • RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。(rk0001,rk0002)
  • Column Family:列族,拥有一个名称(string),包含一个或者多个相关列(info和data是两个列族)
  • Column:属于某一个columnfamily,familyName:columnName,每条记录可动态添加(info列族下的name,age,gender是Column)
  • ersion Number:类型为Long,默认值是系统时间戳,可由用户自定义(没有标在图上,修改列的值时候不会删除原列值,而是增加一条会有不同的version号,一般是时间戳)
  • Value(Cell):Byte array(zl,cls具体的value值)

HBase物理模型

每个column family存储在HDFS上的一个单独文件中,空值不会被保存。
Key 和 Version number在每个 column family中均有一份;
HBase 为每个值维护了多级索引,即:(key, column family, column name, timestamp)

  • Table中所有行都按照row key的字典序排列;
  • Table在行的方向上分割为多个Region;
  • Region按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region;
  • Region是Hbase中分布式存储和负载均衡的最小单元,不同Region分布到不同RegionServer上(如下图1)。
  • Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore和0至多个StoreFile组成,StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上。(如图2)

图1

图2


HBase系统架构

HBase的系统架构图如下:
这里写图片描述

从HBase的架构图上可以看出,HBase中的组件包括Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等,接下来介绍他们的作用。

HBase中的每张表都通过行键按照一定的范围被分割成多个子表(HRegion上面提到的Region),默认一个HRegion超过256M就要被分割成两个,这个过程由HRegionServer管理,而HRegion的分配由HMaster管理。

  1. Zookeeper:HBase依赖Zookeeper,默认情况下HBase管理Zookeeper实例(启动或关闭Zookeeper),Master与RegionServers启动时会向Zookeeper注册。Zookeeper的作用:保证任何时候,集群中只有一个master;存储所有Region的寻址入口;实时监控Region server的上线和下线信息。并实时通知给master;存储HBase的schema和table元数据。
  2. HMaster:为Region server分配region;负责Region server的负载均衡;发现失效的Region server并重新分配其上的region;HDFS上的垃圾文件回收处理schema更新请求。
  3. HRegionServer:维护master分配给他的region,处理对这些region的io请求;负责切分正在运行过程中变的过大的region。(client访问hbase上的数据时不需要master的参与,因为数据寻址访问zookeeper和region server,而数据读写访问region server。master仅仅维护table和region的元数据信息,而table的元数据信息保存在zookeeper上,因此master负载很低。)
  4. HRegion:table在行的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。
    Region按大小分隔,每个表一般是只有一个region。随着数据不断插入表,region不断增大,当region的某个列族达到一个阈值(默认256M)时就会分成两个新的region。
  5. Store:每一个region由一个或多个store组成,至少是一个store,hbase会把一起访问的数据放在一个store里面,即为每个 ColumnFamily建一个store,如果有几个ColumnFamily,也就有几个Store。一个Store由一个memStore和0或者 多个StoreFile组成。 HBase以store的大小来判断是否需要切分region
  6. MemStore:memStore 是放在内存里的。保存修改的数据即keyValues。当memStore的大小达到一个阀值(默认64MB)时,memStore会被flush到文 件,即生成一个快照。目前hbase 会有一个线程来负责memStore的flush操作。
  7. StoreFile:memStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。
  8. HLog:HLog(WAL log):WAL意为write ahead log,用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复。
    HLog文件就是一个普通的Hadoop Sequence File, Sequence File的value是key时HLogKey对象,其中记录了写入数据的归属信息,除了table和region名字外,还同时包括sequence number和timestamp,timestamp是写入时间,sequence number的起始值为0,或者是最近一次存入文件系统中的sequence number。 Sequence File的value是HBase的KeyValue对象,即对应HFile中的KeyValue。

HBase使用场景

  1. 大数据量存储,大数据高并发操作
  2. 需要对数据随机读写操作
  3. 对于数据结构字段不够确定或杂乱无章很难按一个概念去进行抽取的数据适合用HBase
  4. 记录非常稀疏
  5. 多版本数据

(缺点::不适合的场景:事务要求高,多表Join查询;查询教简单:能根据key,扫描一条记录,或全表扫描,或根据key范围性扫描,不支持复杂的sql处理,也不会具有关系型数据库的ACID特性;监控做的不好)

猜你喜欢

转载自blog.csdn.net/u013963380/article/details/74858423
今日推荐