hbase

来源:互联网 发布:php对比java 编辑:程序博客网 时间:2024/06/06 02:49

简介

Hbase是一个高可靠性的,高性能的,面向列,可伸缩的分布式存储系统,Hbase是google Bigtable的开源的实现,与google bigtable利用gfs作为其文件存储系统类似;Hbase利用hadoop的HDFS作为其文件存储系统,google运行mapreduce来处理bigtable这个中的海量数据;google利用chubby作为协同服务,hbase利用zookeeper作为协同服务;

Hbase特点:

大:可以有上亿行,上百万列;

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

系数,对于空的列,并不占用存储空间;因此,表可以设计的非常稀疏;此外,pig和hive还为Hbase提供了高层语言支持,在Hbase中进行数据统计处理就变得非常简单;

sqoop为Hbase提供了RDBMS数据导入功能,使得传统的数据库数据向Hbase中迁移变得非常方便;

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表数据,适合做数据统计;

Hbase的存储结构

Hbase的存储结构基于Hadoop的HDFS结构,所以其存储也具备HDFS的特性;

1client

RPC(远程调用机制)region(域,区)

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

2XooKeeper

在ZooKeeper quorum中,除了存储-Root-表的地址和HMaster的地址外,HRegion-server也会以Ephemeral(暂时的)的方式把自己注册到Zookeeper中,是的HMaster可以随时感知到各个HRegion的健康状态;此外Zookeeper也避免了HMaster的单点问题;

HMaster

HMaster没有单点问题,HBase中可以启动多个HMaster,通过ZooKeeper的Master Election机制保证总有一个Master运行。HMaster主要负责Table和Region的管理工作,具体包括一下功能:

管理用户对Table的增删改查操作;

管理HRegionServer的负载均衡,调整Region分布;

在Region Split后,负责新Region的分配;

在Hregion停机后,负责失效的HRegionServer上的Region迁移;

4HRegionServer

HRegionServer主要负责相应用户的IO请求,想HDFS文件系统中读写数据,是HBase中最核心的模块;

HRegionServer内部管理了一系列HRegion对象,每个HRegion对应Table中的一个Region,HRegion由多个HStore组成,每个HStore对应Table中一个Column Family的存储;

可以看出每一个Column Family其实就是一个集中的存储单元,因此最好将具有共同I/O特性的Column放在一个Column Family中,这样最高效;HStore存储是HBase存储的核心,其中有两部分,一部分为MemStore,一部分是StoreFile。MemStore是Sorted Memory Buffer,用户写入数据首先会放在MemStore,当其满了之后会执行Flush操作变成一个StoreFile(底层实现是HFile);

当StoreFIle文件数量增长到一定阈值时,会出发Compact合并操作,将多个StoreFile文件合并成一个StoreFile;合并过程中会进行版本合并和数据删除;

HBase只有增加数据,所偶的更新和删除操作都是在后学的Compact过程中进行的,以此保持I/O高性能;当Store文件越来越大,到达一定阈值时,就会触发Split操作,切片完成后将原来的Region下线,然后将连个子Region用HMaster分配到相应HRegionServer上;

每个HRegionServer中都有一个HLog对象,实现Write Ahead Log的类,平时用户操作的时候HLog也会记录一份;然后重新加载未完成的操作;

HBase存储格式

Hbase所有文件都存储在HDFS上,主要有两种文件类型HFile和HLogFIle;

Hfile是key-value格式,是Hadoop中的二进制格式文件;

Hlog File:HBase中WAL的存储格式,物理上是SequenceFIle格式;


HFile文件是不定长的,长度固定的只有其中的两块Trailer和FIleinfo;trailer中有指针指向其他数据块的起始点,FIleInfo记录了文件的一些元信息,例如长度,开始结尾,最大,最小;

data block是HBase I/O的基本单元,为了提高效率,HReginServer中有基于LRU的BlockCache机制;

Hbase中的表都是Big table,有三个基本类型需要定义:

Row key 是行在big table上的唯一标识;

Time Stamp 是每次数据操作对应关联的时间戳,可以看作是SVN的版本;

column定义为<family>:<label>,通过这两部分可以制定唯一的数据存储列,主要是family的定义和使用,定义和修改都要进行类似DB的DDL操作;label不需要定义可以直接使用;

row key

和nosql数据库一样,Row Key是用来检索记录的主键;设计key时,要将经常一起读取的行存储在一起,因为存储时数据会按照Row key的字典顺序排序存储的;

列族

HBase表中的每个列都归属于某个列族,列族是表的schema的一部分(列不是),必须在使用表之前定义,列名都以列族为前缀,用  列族:名字;

访问控制,磁盘和内存的使用统计都是在列族层面进行的可以添加新的基本数据,控制应用权限;

时间戳

通过Row和column确定一个存储单元为cell每个cell都保存着一份数据的多个版本,版本通过时间戳来索引

为了避免版本冲突,采取了保存最后的n个版本,或者保存一段时间内的所有版本;

Cell

是由row ,column,version唯一确定的单元;

框架结构以及流程

HBase的核心组件包括HBase Master Server,HRegion Server,HRegion,HMemcache,HLog,HStore;

HBase Master 管理HRegionServer,并且Master并不直接存储任何数据;Hbase逻辑上的Table被定义为一个Region存储在某个HRegionServer上;HRegion与Region对应关系是一对多的关系;每一个HRegion在物理上被划分为三个部分:HMemcache,Hlog,Hstore,分别代表了缓存,日志,持久层;

Hbase中有两个表,一个.META.,一个.-ROOT-,前者记录着用户表中的Region信息,可以有多个Region;

另一个则记录着前一个文件表中的Region信息,只有一个Region;

client访问用户数据之前首先需要先访问Zookeeper,然后访问-ROOT-表,接着访问META表,最后才能找到用户数据的位置去访问,中间需要多次网络操作;ROOT表和META表是层层的嵌套的关系;









原创粉丝点击