最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

[Hbase] Hbase的核心概念、架构、写逻辑详细讲解!

[复制链接]
跳转到指定楼层
楼主
发表于 2021-6-4 15:30:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 168主编 于 2021-6-4 15:31 编辑

Hbase1. 概念
base 是分布式、面向列的开源数据库(其实准确的说是面向列族)。HDFS 为 Hbase 提供可靠的底层数据存储服务,MapReduce 为 Hbase 提供高性能的计算能力,Zookeeper 为 Hbase 提供稳定服务和 Failover 机制,因此我们说 Hbase 是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。
2. 列式存储
列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。
这里的列式存储其实说的是列族存储,Hbase 是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。为了加深对 Hbase 列族的理解,下面是一个简单的关系型数据库的表和 Hbase 数据库的表:
3. Hbase 核心概念3.1. Column Family 列族
Column Family 又叫列族,Hbase 通过列族划分数据的存储,列族下面可以包含任意多的列,实现灵活的数据存取。Hbase 表的创建的时候就必须指定列族。就像关系型数据库创建的时候必须指定具体的列是一样的。Hbase 的列族不是越多越好,官方推荐的是列族最好小于或者等于 3。我们使用的场景一般是 1 个列族。
3.2. Rowkey(Rowkey 查询,Rowkey 范围扫描,全表扫描)
Rowkey 的概念和 mysql 中的主键是完全一样的,Hbase 使用 Rowkey 来唯一的区分某一行的数据。Hbase 只支持 3 中查询方式:基于 Rowkey 的单行查询,基于 Rowkey 的范围扫描,全表扫描。
3.3. Region 分区
  • Region:Region 的概念和关系型数据库的分区或者分片差不多。Hbase 会将一个大表的数
    据基于 Rowkey 的不同范围分配到不通的 Region 中,每个 Region 负责一定范围的数据访问和存储。这样即使是一张巨大的表,由于被切割到不通的 region,访问起来的时延也很低。
3.4. TimeStamp 多版本
  • TimeStamp 是实现 Hbase 多版本的关键。在 Hbase 中使用不同的 timestame 来标识相同rowkey 行对应的不通版本的数据。在写入数据的时候,如果用户没有指定对应的
    timestamp,Hbase 会自动添加一个 timestamp,timestamp 和服务器时间保持一致。在
    Hbase 中,相同 rowkey 的数据按照 timestamp 倒序排列。默认查询的是最新的版本,用户可同指定 timestamp 的值来读取旧版本的数据。
4. Hbase 核心架构
Hbase 是由 Client、Zookeeper、Master、HRegionServer、HDFS 等几个组建组成。
4.1. Client:
  • Client 包含了访问 Hbase 的接口,另外 Client 还维护了对应的 cache 来加速 Hbase 的
    访问,比如 cache 的.META.元数据的信息。
4.2. Zookeeper:
  • Hbase 通过 Zookeeper 来做 master 的高可用、RegionServer 的监控、元数据的入口
    以及集群配置的维护等工作。具体工作如下:
  • 通过 Zoopkeeper 来保证集群中只有 1 个 master 在运行,如果 master 异
    常,会通过竞争机制产生新的 master 提供服务
  • 通过 Zoopkeeper 来监控 RegionServer 的状态,当 RegionSevrer 有异常的
    时候,通过回调的形式通知 Master RegionServer 上下限的信息
  • 通过 Zoopkeeper 存储元数据的统一入口地址。
4.3. Hmaster
  • master 节点的主要职责如下:
  • 为 RegionServer 分配 Region
  • 维护整个集群的负载均衡
  • 维护集群的元数据信息发现失效的 Region,并将失效的 Region 分配到正常
    RegionServer 上当 RegionSever 失效的时候,协调对应 Hlog 的拆分
4.4. HregionServer
  • HregionServer 直接对接用户的读写请求,是真正的“干活”的节点。它的功能概括如
    下:
  • 管理 master 为其分配的 Region
  • 处理来自客户端的读写请求
  • 负责和底层 HDFS 的交互,存储数据到 HDFS
  • 负责 Region 变大以后的拆分
  • 负责 Storefile 的合并工作
4.5. Region 寻址方式(通过 zookeeper .META)
第 1 步:Client 请求 ZK 获取.META.所在的 RegionServer 的地址。
第 2 步:Client 请求.META.所在的 RegionServer 获取访问数据所在的 RegionServer 地
址,client 会将.META.的相关信息 cache 下来,以便下一次快速访问。
第 3 步:Client 请求数据所在的 RegionServer,获取所需要的数据。


4.6. HDFS
  • HDFS 为 Hbase 提供最终的底层数据存储服务,同时为 Hbase 提供高可用(Hlog 存储在
    HDFS)的支持。
5. Hbase 的写逻辑5.1. Hbase 的写入流程

从上图可以看出氛围 3 步骤:
获取 RegionServer
第 1 步:Client 获取数据写入的 Region 所在的 RegionServer
请求写 Hlog
第 2 步:请求写 Hlog, Hlog 存储在 HDFS,当 RegionServer 出现异常,需要使用 Hlog 来
恢复数据。
请求写 MemStore
第 3 步:请求写 MemStore,只有当写 Hlog 和写 MemStore 都成功了才算请求写入完成。
MemStore 后续会逐渐刷到 HDFS 中。
5.2. MemStore 刷盘
为了提高 Hbase 的写入性能,当写请求写入 MemStore 后,不会立即刷盘。而是会等到一
定的时候进行刷盘的操作。具体是哪些场景会触发刷盘的操作呢?总结成如下的几个场景:
全局内存控制
  • 这个全局的参数是控制内存整体的使用情况,当所有 memstore 占整个 heap 的最大比
    例的时候,会触发刷盘的操作。这个参数是
    hbase.regionserver.global.memstore.upperLimit,默认为整个 heap 内存的 40%。
    但这并不意味着全局内存触发的刷盘操作会将所有的 MemStore 都进行输盘,而是通过
    另外一个参数 hbase.regionserver.global.memstore.lowerLimit 来控制,默认是整个
    heap 内存的 35%。当 flush 到所有 memstore 占整个 heap 内存的比率为 35%的时
    候,就停止刷盘。这么做主要是为了减少刷盘对业务带来的影响,实现平滑系统负载的
    目的。
    MemStore 达到上限
  • 当 MemStore 的大小达到 hbase.hregion.memstore.flush.size 大小的时候会触发刷
    盘,默认 128M 大小
    RegionServer 的 Hlog 数量达到上限
  • 前面说到 Hlog 为了保证 Hbase 数据的一致性,那么如果 Hlog 太多的话,会导致故障
    恢复的时间太长,因此 Hbase 会对 Hlog 的最大个数做限制。当达到 Hlog 的最大个数
    的时候,会强制刷盘。这个参数是 hase.regionserver.max.logs,默认是 32 个。
    手工触发
  • 可以通过 hbase shell 或者 java api 手工触发 flush 的操作。
    关闭 RegionServer 触发
  • 在正常关闭 RegionServer 会触发刷盘的操作,全部数据刷盘后就不需要再使用 Hlog 恢
    复数据。
    Region 使用 HLOG 恢复完数据后触发
  • :当 RegionServer 出现故障的时候,其上面的 Region 会迁移到其他正常的
    RegionServer 上,在恢复完 Region 的数据后,会触发刷盘,当刷盘完成后才会提供给
    业务访问。
6. HBase vs Cassandra
楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-17 13:39

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表