hbase存储层级和构架

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


hbase_architecture.jpg

HBase访问接口

  • Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据
  • HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用
  • Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据
  • REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制
  • Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计
  • Hive,当前Hive的Release版本尚没有加入对HBase的支持,但在下一个版本Hive 0.7.0中将会支持HBase,可以使用类似SQL语言来访问HBase Phoenix

HBase数据模型

  1. Table & Column Family


    hbase_table.png
  • Row Key 行键
    与nosql数据库一样,row key是用来表示唯一一行记录的主键,HBase的数据时按照RowKey的字典顺序进行全局排序的,所有的查询都只能依赖于这一个排序维度。访问HBASE table中的行,只有三种方式:
    • 通过单个row key访问;
    • 通过row key的range(正则)
    • 全表扫描
  • Timestamp: 时间戳,每次数据操作对应的时间戳,可以看作是数据的version number
  • Columns Family 列族
    列簇:HBASE表中的每个列,都归属于某个列族。列族是表的schema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math 都属于courses这个列族
  • Cell:由{row key,columnFamily,version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存储。关键字:无类型、字节码
  • Time Stamp 时间戳
    HBASE中通过rowkey和columns确定的为一个存储单元称为cell。每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。

所以之间的关系是:

  • 表是行的集合。
  • 行是列族的集合。
  • 列族是列的集合。
  • 列是键值对的集合。
  1. Table & Region

当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey,endkey)表示,不同的region会被Master分配给相应的RegionServer进行管理。

hbase_region_all.png

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

table在行的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。
Region按大小分隔,每个表一般是只有一个region。随着数据不断插入表,region不断增大,当region的某个列族达到一个阀值(默认256M)时就会分成两个新的region。

每个region由以下信息标识:

  • <表名,startRowKey,创建时间>
  • 由目录表(-ROOT-和.META.)记录该region的endRowKey
  • HRegion定位:Region被分配给哪个RegionServer是完全动态的,所以需要机制来定位Region具体在哪个region server。

所以之间的关系是:

  • HRegionServer管理一系列HRegion对象:
  • 每个HRegion对应Table中一个Region,HRegion由多个HStore组成;
  • 每个HStore对应Table中一个Column Family的存储;
  • Column Family就是一个集中的存储单元,故将具有相同IO特性的Column放在一个Column Family会更高效。
  • HBase使用三层结构来定位region
    • 通过zookeeper里的文件/hbase/rs得到-ROOT-表的位置。-ROOT-表只有一个region
    • 通过-ROOT-表查找.META.表的第一个表中相应的region的位置。其实-ROOT-表是.META.表的第一个region;.META.表中的每一个region在-ROOT-表中都是一行记录
    • 通过.META.表找到所要的用户表region的位置。用户表中的每个region在.META表中都是一行记录
  1. 其他概念:

    • HStore : HBase存储的核心。由MemStore和StoreFile组成。MemStore是Stored Memory Buffer

    • HLog : 引入HLog原因:在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的内存数据就会丢失,引入HLog就是防止这种情况

    • HLog工作机制:
      每个HRegionServer中都会有一个HLog对象,HLog是一个实现Write Ahead Log的类,每次用户操作写入MemStore的同时,也会写一份数据到HLog文件,HLog文件定期会滚动出新,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知,HMaster首先处理遗留的HLog文件,将不同region的log数据拆分,分别放到相应region目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复

    • HMaster :
      HBase可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master在运行
      主要负责Table和Region的管理工作:
      管理用户对表的增删改查操作
      管理HRegionServer的负载均衡,调整Region分布Region Split后,负责新Region的分布
      在HRegionServer停机后,负责失效HRegionServer上Region迁移

HBase的存储格式

HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,格式主要有两种:

  1. HFile,HBase中Key-Value数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile。
  2. HLog File,HBase中WAL(Write Ahead Log)的存储格式,物理上是Hadoop的Sequence File
hfile.jpg

HFile文件不定长,长度固定的块只有两个:Trailer和FileInfo
Trailer中指针指向其他数据块的起始点
File Info中记录了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等
Data Index和Meta Index块记录了每个Data块和Meta块的起始点
Data Block是HBase I/O的基本单元,为了提高效率,HRegionServer中有基于LRU的Block Cache机制
每个Data块的大小可以在创建一个Table的时候通过参数指定,大号的Block有利于顺序Scan,小号Block利于随机查询
每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成, Magic内容就是一些随机数字,目的是防止数据损坏
HFile里面的每个KeyValue对就是一个简单的byte数组。这个byte数组里面包含了很多项,并且有固定的结构

hfile_data.jpg

KeyLength和ValueLength:两个固定的长度,分别代表Key和Value的长度
Key部分:Row Length是固定长度的数值,表示RowKey的长度,Row 就是RowKey
Column Family Length是固定长度的数值,表示Family的长度
接着就是Column Family,再接着是Qualifier,然后是两个固定长度的数值,表示Time Stamp和Key Type(Put/Delete)
Value部分没有这么复杂的结构,就是纯粹的二进制数据

更多内容https://blue-shadow.top

你可能感兴趣的:(hbase存储层级和构架)