Hbase简介

这篇具有很好参考价值的文章主要介绍了Hbase简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Hbase是什么

HBase的特点

Hbase架构各个角色的功能

Hbase的使用场景

Hbase的写逻辑

MemStore 刷盘

Hlog简介

Hlog结构

Hlog的生命周期

产生

滚动

过期

删除

RegionSrver的故障恢复


Hbase是什么

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

HBase的特点

  1. hbase有五个维度来确定某个具体的值 行键 列族 列修饰符  录入类型 时间戳
  2. 强一致性
  3. 稀疏多维列表
  4. 多维稀疏排序Map

BigTable本质上也是一个map结构数据库,hbase亦然,也是由一系列kv组成的 然而hbase的map系统有很多限定词---稀疏的,多维的,分布式的,持久性的,排序的

Hbase的key是一个复合键,由行键,列族,列修饰符,录入类型,时间戳组成,value为cell的值

Cell是hbase中最小的维度,指的就是hbase中具有值的那行数据

每个tableName,rowKey,columnFamily,qualifier,value 所表示的维度就是一个cell

多维:意思就是 map 里的 key 是多维度的,一共是 5 个维度组成的 key,

hbase 核心数据结构是多维 key 组成的 map 数据结构

稀疏:是hbase的一个突出特点,在其他数据库中,对于空值处理一般会填充null值,而对于hbase

空 值不需要任何填充,Hbase的列理论上是允许无限扩展的,对于成百万的列来说,会有大量的空值,如果使用null填充的策略,势必会造成大量空间的浪费,因此,稀疏性是hbase无限扩展的 一个重要条件

排序:构成hbase的kv在同一文件中都是有序的,但规则不仅仅是按照rowkey排序

HBase是三维有序存储的,是指rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度是依照ASCII码表排序的。(比如A排在a前面)

先rowkey升序排序,
rowkey相同则column key升序排序
rowkey、column key相同则timestamp降序排序

分布式: 构成hbase的map都不在某台机器上,而是分布在整个集群中

5.HDFS压缩存储

6.自动水平扩展

7.服务器自动调整平衡

HDFS为Hbase提供可靠的底层数据存储服务

MapReduce为Hbase停供高性能的计算能力

Zookeeper为Hbase提供稳定服务和FailOver(容错)机制

因此我们说Hbase是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案

Hbase架构各个角色的功能

  • Client

Client包含了访问Hbase的接口,另外Client还维护了对应的cache来提高HBase的访问,比如说cache的META的元数据信息

  • Zookeeper

Hbase通过Zookeeper来做master的高可用,RegionServer的监控,元数据的入口以及集群配置的维护等工作

通过Zookeeper来保证集群中只有一个master在运行,如果master异常,会通过竞争机制来产生新的master提供服务.

通过Zookeeper来监控ReginServer,当RegionServer有异常的时候,通过回调的形式通知mastor

RegionServer上下限的信息

通过zookeeper存储元数据的统一入口地址

  • Hmaster
  1. 为RegionServer分配Region
  2. 维护整个集群的负载均衡
  3. 维护集群的元数据信息
  4. 发现失效的Region,并将失效的Region分配到正常的RegionServer上
  5. 当RegionServer失效的时候,协调对应的Hlog进行拆分
  • HregionServer

HregionServer直接对接用户的读写请求,是真正的“干活”的节点。它的功能概括如下:

  1. 管理master为其分配的Region
  2. 处理来自客户端的读写请求
  3. 负责和底层HDFS的交互,存储数据到HDFS
  4. 负责Region变大以后的拆分
  5. 负责Storefile的合并工作  存储文件
  • HDFS

HDFS为Hbase提供最终的底层数据存储服务,同时为Hbase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下:

  1. 提供元数据和表数据的底层分布式存储服务
  2. 数据多副本,保证的高可靠和高可用性

Hbase的使用场景

由于HBase丰富的特性,加上自身的海量数据存储能力与超大规模并发访问能力,使得HBase应用非常广泛。目前已经在金融、交通、医疗、车联网、IoT等众多领域有了最佳实践,涉及到订单/账单存储、用户画像、时空/时序数据、对象存储、Cube分析等各个使用场景。

在实际生产过程中满足哪些条件的时候可以选择HBase作为底层存储

1、数据量规模非常庞大

一般而言,单表数据量如果只有百万级或者更少,不是非常建议使用HBase而应该考虑关系型数据库是否能够满足需求;单表数据量超过千万或者十亿百亿的时候,并且伴有较高并发,可以考虑使用HBase。这主要是充分利用分布式存储系统的优势,如果数据量比较小,单个节点就能有效存储的话则其他节点的资源就会存在浪费。

2、要求是实时的点查询

HBase是一个Key-Value数据库,默认对Rowkey即行键做了索引优化,所以即使数据量非常庞大,根据行键的查询效率依然会很高,这使得HBase非常适合根据行键做单条记录的查询。值得说明的是,允许根据行键的一部分做范围查询,这里涉及到Rowkey的设计问题,不再赘言。

3、能够容忍NoSQL短板

前面提及了NoSQL并不能解决所有问题,HBase也是一样,如果业务场景是需要事务支持、复杂的关联查询等,不建议使用HBase。HBase有它适合的业务场景,我们不能苛求它能够帮我们解决所有问题。

4、数据分析需求并不多

虽然说HBase是一个面向列的数据库,但它有别于真正的列式存储系统比如Parquet、Kudu等,再加上自身存储架构的设计,使得HBase并不擅长做数据分析,或者说数据分析是HBase的弱项,所以如果主要的业务需求就是为了做数据分析,比如做报表,那么不建议直接使用HBase。

如果能够满足上诉的几点,硬件条件也满足的情况下,强烈建议考虑使用HBase作为底层存储解决你的问题。

Hbase的写逻辑

Hbase的写逻辑涉及到写内存、写log、刷盘等操作,看起来简单,其实里面又有很多的逻辑,下面就来做详细的介绍。 

Hbase简介

第1步:Client从ZK获取数据写入的Region所在的RegionServer

第2步:请求写Hlog

第3步:请求写MemStore

只有当写Hlog和写MemStore都成功了才算请求写入完成。MemStore后续会逐渐刷到HDFS中。

PS:Hlog存储在HDFS,当RegionServer出现异常,需要使用Hlog来恢复数据。

MemStore 刷盘

为了提高 Hbase 的写入性能,当写请求写入 MemStore 后,不会立即刷盘。而是会等到一定的时候进行刷盘的操作。具体是哪些场景会触发刷盘的操作呢?总结成如下的几个场景:

  1. 这个全局的参数是控制内存整体的使用情况,当所有 memstore 占整个 heap 的最大比例的时候,会触发刷盘的操作。这个参数是hbase.regionserver.global.memstore.upperLimit,默认为整个 heap 内存的 40%。但这并不意味着全局内存触发的刷盘操作会将所有的 MemStore 都进行盘,而是通过另外一个参数hbase.regionserver.global.memstore.lowerLimit 来控制,默认是整个 heap 内存的 35%。当 flush 到所有 memstore 占整个 heap 内存的比率为35%的时候,就停止刷盘。这么做主要是为了减少刷盘对业务带来的影响,实现平滑系统负载的目的。
  2. 当 MemStore 的大小达到 hbase.hregion.memstore.flush.size 大小的时候会触发刷盘,默认 128M 大小
  3. 前面说到 Hlog 为了保证 Hbase 数据的一致性,那么如果 Hlog 太多的话,会导致故障恢复的时间太长,因此 Hbase 会对 Hlog 的最大个数做限制。当达到 Hlog 的最大个数的时候,会强制刷盘。这个参数是 hase.regionserver.max.logs,默认是 32 个。
  4. 可以通过 hbase shell 或者 java api 手工触发 flush 的操作。
  5. 在正常关闭 RegionServer 会触发刷盘的操作,全部数据刷盘后就不需要再使用 Hlog 恢复数据。
  6. 当 RegionServer 出现故障的时候,其上面的 Region 会迁移到其他正常的 RegionServer 上,在恢复完 Region 的数据后,会触发刷盘,当刷盘完成后才会提供给业务访问。

Hlog简介

Hlog是Hbase实现WAL(Write ahead log)方式产生的日志信息,内部是一个简单的顺序日志。每个RegionServer对应1个Hlog(备注:1.x版本的可以开启MultiWAL功能,允许多个Hlog),所有对于该RegionServer的写入都被记录到Hlog中。Hlog实现的功能就是保证数据安全。当RegionServer出现问题的时候,能跟进Hlog来做数据恢复。此外为了保证恢复的效率,Hbase会限制最大保存的Hlog数量,如果达到Hlog的最大个数(hase.regionserver.max.logs参数控制)的时候,就会触发强制刷盘操作。对于已经刷盘的数据,其对应的Hlog会有一个过期的概念,Hlog过期后,会被监控线程移动到.oldlogs,然后会被自动删除掉。

Hlog结构

             Hbase简介

  1. 多个Region共享一个Hlog文件,
  2. 单个Region在Hlog中是按照时间顺序存储的,
  3. 但是多个Region可能并不是完全按照时间顺序

  序列id

每个Hlog最小单元由Hlogkey和 两部分组成。Hlogky由sequenceid、timestamp、克拉死ter,cluster ids、regionname以及tablename等组成,WALEdit是由一系列的KeyValue组成,对一行上所有列(即所有KeyValue)的更新操作,都包含在同一个WALEdit对象中,这主要是为了实现写入一行多个列时的原子性。

  1. Hlog
    1. Hlogkey
      • sequenceid : 一个store级别的自增序列号,region的数据恢复和Hlog过期清除都要依赖这个信息
      • timestamp
      • cluster ids
      • regionname
      • tablename
    2. WALEdit
      • n个 KeyValue
    3. sequenceid的相关逻辑:Memstore在达到一定的条件会触发刷盘的操作,刷盘的时候会获取刷新到最新的一个sequenceid的下一个sequenceid,并将新的sequenceid赋给oldestUnflushedSequenceId,并刷到Ffile中。Hlog文件对应所有Region的store中最大的sequenceid如果已经刷盘,就认为Hlog文件已经过期,就会移动到.oldlogs,等待被移除当RegionServer出现故障的时候,需要对Hlog进行回放来恢复数据。回放的时候会读取Hfile的oldestUnflushedSequenceId中的sequenceid和Hlog中的sequenceid进行比较,小于sequenceid的就直接忽略,但与或者等于的就进行重做。回放完成后,就完成了数据的恢复工作

Hlog的生命周期

产生

所有涉及到数据的变更都会先写Hlog,除非是你关闭了Hlog

滚动

Hlog的大小通过参数hbase.regionserver.logroll.period控制,默认是1个小时,时间达到hbase.regionserver.logroll.period 设置的时间,Hbase会创建一个新的Hlog文件。这就实现了Hlog滚动的目的。Hbase通过hbase.regionserver.maxlogs参数控制Hlog的个数。滚动的目的,为了控制单个Hlog文件过大的情况,方便后续的过期和删除。

过期

Hlog的过期判断依赖于sequenceid。Hbase会将Hlog的sequenceid和Hfile最大的sequenceid(刷新到的最新位置)进行比较,如果该Hlog文件中的sequenceid比刷新的最新位置的sequenceid都要小,那么这个Hlog就过期了,过期了以后,对应Hlog会被移动到.oldlogs目录。

要将过期的Hlog移动到.oldlogs目录,而不是直接删除,原因如下:

因为Hbase还有一个主从同步的功能,这个依赖Hlog来同步Hbase的变更,有一种情况不能删除Hlog,那就是Hlog虽然过期,但是对应的Hlog并没有同步完成,因此比较好的做法是移动到别的目录。再增加对应的检查和保留时间。

删除

如果Hbase开启了replication,当replication执行完一个Hlog的时候,会删除Zoopkeeper上的对应Hlog节点。在Hlog被移动到.oldlogs目录后,Hbase每隔hbase.master.cleaner.interval(默认60秒)时间会去检查.oldlogs目录下的所有Hlog,确认对应的Zookeeper的Hlog节点是否被删除,如果Zookeeper 上不存在对应的Hlog节点,那么就直接删除对应的Hlog。

hbase.master.logcleaner.ttl(默认10分钟)这个参数设置Hlog在.oldlogs目录保留的最长时间。

RegionSrver的故障恢复

我们知道,RegionServer的相关信息保存在ZK中,在RegionServer启动的时候,会在Zookeeper中创建对应的临时节点。RegionServer通过Socket和Zookeeper建立session会话,RegionServer会周期性地向Zookeeper发送ping消息包,以此说明自己还处于存活状态。而Zookeeper收到ping包后,则会更新对应session的超时时间。

当Zookeeper超过session超时时间还未收到RegionServer的ping包,则Zookeeper会认为该RegionServer出现故障,ZK会将该RegionServer对应的临时节点删除,并通知Master,Master收到RegionServer挂掉的信息后就会启动数据恢复的流程.文章来源地址https://www.toymoban.com/news/detail-415683.html

到了这里,关于Hbase简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HBase-架构与设计

    HBase是一个基于java的NoSQL分布式列存储数据库,主要用于存储非结构化和半结构化的松散数据。将Hadoop中的HDFS作为底层文件存储系统,来提供容错和可靠性,以及存储系统的拓展性。 HBase的设计思想来自Google的Bigtable论文,是分布式数据库的实现。HDFS是一个高可靠、高延迟的

    2024年02月05日
    浏览(19)
  • hbase架构详解

    一、什么是Hbae(Hbase的介绍)?         1、Hbase的原型是 Google 的 BigTable 论文,受到该论文思想启发,目前作为hadoop的子项目来开发维护用来支持结构化的数据存储。         2、Hbase是一个高可用、高性能、面向列、可伸缩的分布式存储系统。 二、Hbase的特性 1、海量存

    2024年02月13日
    浏览(24)
  • 【HBase】架构

    实现类为 HMaster。 负责监控集群中所有的 RegionServer 实例。 (1)管理元数据表格 hbase:meta,接收用户 对表格 创建修改删除的命令并执行 (2)监控 region 是否需要进行 负载均衡 , 故障转移 和 region 的 拆分 。 通过启动多个后台线程监控实现上述功能: 负载均衡器 周期性监

    2024年02月04日
    浏览(26)
  • Hbase架构

    HBase 系统遵循 Master/Salve 架构,由三种不同类型的组件组成: 提供了访问hbase的接口 提供cache缓存提高访问hbase的效率 , 比如region的信息 Zookeeper 保证任何时候,集群中只有一个 Master; 存储所有 Region 的寻址入口; 实时监控 Region Server 的状态,将 Region Server 的上线和下线信息

    2024年02月08日
    浏览(20)
  • Hbase文档--架构体系

    阿丹:         基础概念了解之后了解目标知识的架构体系,就能事半功倍。         HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。         与FUJITSU Cliq等商用大数

    2024年02月11日
    浏览(23)
  • 1.3 HBase 基本架构

    架构角色: 1)Master 实现类为 HMaster,负责监控集群中所有的 RegionServer 实例。主要作用如下: (1)管理元数据表格 hbase:meta,接收用户对表格创建修改删除的命令并执行 (2)监控 region 是否需要进行负载均衡,故障转移和 region 的拆分。 通过启动多个后台线程监控实现上述

    2024年02月04日
    浏览(37)
  • HBase架构和部署(超级详细)

    N.1.1 HBase简介 1 )HBase是一个分布式的、 面向列 的开源数据库,它是一个适合于 非结构化数据存储 的数据库。另一个不同的是HBase基于列的而不是基于行的模式。 (1) 关系型数据库: ———————————————————————— ———————————————

    2024年02月04日
    浏览(42)
  • HBASE学习一:原理架构详解

    HBase 是一款面向列存储,用于存储处理海量数据的 NoSQL 数据库。它的理论原型是Google 的 BigTable 论文。你可以认为 HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。 HBase 的存储是基于HDFS的,HDFS 有着高容错性的特点,被设计用来部署在低廉的硬件上,基于

    2024年01月18日
    浏览(34)
  • HBase基础知识(三):HBase架构进阶、读写流程、MemStoreFlush、StoreFile Compaction、Region Split

    1)StoreFile 保存实际数据的物理文件,StoreFile以HFile的形式存储在HDFS上。每个Store会有一个或多个StoreFile(HFile),数据在每个StoreFile中都是有序的。 2)MemStore 写缓存,由于HFile中的数据要求是有序的,所以数据是先存储在MemStore中,排好序后,等到达刷写时机才会刷写到HFi

    2024年01月17日
    浏览(40)
  • HBase高阶(一)基础架构及存储原理

    HBase是Hadoop生态系统中的一个分布式、面向列的开源数据库,具有高可伸缩性、高性能和强大的数据处理能力。广泛应用于处理大规模数据集。 HBase是一种 稀疏的 、 分布式 、 持久的 多维排序map 稀疏 :对比关系型数据库和非关系型数据库, 关系型数据库 是以 表格 的形式

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包