欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Hbase基本原理

程序员文章站 2022-10-25 19:25:12
Hbase表中的每个列,都归属与某个列族。列族是表的chema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math 都属于courses 这个列族。访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权... ......

一、hbase是什么

 hbase 是一种类似于数据库的存储层,也就是说 hbase 适用于结构化的存储。并且 hbase 是一种列式的分布式数据库,是由当年的 google 公布的 bigtable 的论文而生。hbase 底层依旧依赖 hdfs 来作为其物理存储。

 


 

二、hbase的列式存储结构

行式存储:传统的数据库是关系型的,且是按行来存储的

Hbase基本原理

 其中只有张三把一行数据填满了,李四王五赵六的行都没有填满。因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。

 列式存储:

 hbase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个hbase:

  • 表是行的集合。
  • 行是列族的集合。
  • 列族是列的集合。
  • 列是键值对的集合。

 Hbase基本原理

row key行键 (row key): 可以是任意字符串(最大长度是 64kb,实际应用中长度一般为 10-100bytes),在hbase内部,row key保存为字节数组。存储时,数据按照row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)。

列族: hbase表中的每个列,都归属与某个列族。列族是表的chema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math 都属于courses 这个列族。访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。

时间戳: hbase中通过row和columns确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。 为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

cell: 由{row key, column(= + ), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

 


 三、hbase架构

 Hbase基本原理


zookeeper

 zookeeper 是作为 hbase master 的 ha 解决方案。也就是说,是 zookeeper 保证了至少有一个 hbase master 处于运行状态。并且 zookeeper 负责 region 和 region server 的注册。

hmaster:

hbase master 用于协调多个 hregion server,侦测各个  hregion server 之间的状态,并平衡 hregion server 之间的负载。hbase master 还有一个职责就是负责分配 region 给 hregion server。hbase 允许多个 master 节点共存,但是这需要 zookeeper 的帮助。不过当多个 master 节点共存时,只有一个 master 是提供服务的,其他的 master 节点处于待命的状态。当正在工作的 master 节点宕机时,其他的 master 则会接管 hbase 的集群。

  1. 为region server分配region,负责region server的负载均衡
  2. 管理用户对table的增、删、改、查操作
  3. 发现失效的region server并重新分配其上的region
  4. gfs上的垃圾文件回收
  5. 在hregionserver停机后,负责失效hregionserver 上的regions迁移

hdfs:

hdfs是hbase运行的底层文件系统

hregionserver

hregionserver是regionserver的实现,服务和管理regions,集群中hregionserver运行在datanode上。

对于一个 hregion server 而言,其包括了多个 hregion。hregion server 的作用只是管理表格,以及实现读写操作。client 直接连接 hregion server,并通信获取 hbase 中的数据。对于 region 而言,则是真实存放 hbase 数据的地方,也就说 region 是 hbase 可用性和分布式的基本单位。如果当一个表格很大,并由多个 cf 组成时,那么表的数据将存放在多个 region 之间,并且在每个 region 中会关联多个存储的单元(store)。

hregion

region 是真实存放 hbase 数据的地方,也就说 region 是 hbase 可用性和分布式的基本单位;每个hregion对应了table中的一个region,随着数据的不断加入,region会不断增大,当region增大一个阀值时,region会等分为两个region。当region分裂越来越多时,都将在region server上这时将无法满足负载均衡,所以hmaster 将会发起协调的作用,将给table的所有region平均分配到所有的region server上。

hregion中由多个hstore组成。每个hstore对应了table中的一个column family的存储,可以看出每个column family其实就是一个集中的存储单元,因此最好将具备共同io特性的column放在一个column family中,这样最高效。hstore包括内存memstore 和位于磁盘的storefile;数据写入时先进入memstore,当memstore中的数据到达阀值后,hregion server 会启动flashcache 进程将内存的数据写入磁盘storefile。每次写入都会形成一个单独的storefile文件。当storefile文件的数量到达一个阀值时,系统会将storefile文件合并,在合并时会进行版本的合并和删除文件(合并时会删除低版本的数据),形成一个更大的storefile。在合并期间无法访问数据。

客服端查找数据时,先在memstroe查找,然后storefile。

hlog