• 聊一聊 HBase 是如何写入数据的?


    hi,大家好,我是大D。今天继续了解下 HBase 是如何写入数据的,然后再讲解一下一个比较经典的面试题。

    Region Server 寻址

    1. HBase Client 访问 ZooKeeper;
    2. 获取写入 Region 所在的位置,即获取 hbase:meta 表位于哪个 Region Server;
    3. 访问对应的 Region Server;
    4. 获取 hbase:meta 表,并查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 Region 信息以及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问;

    写 Hlog

    1. HBase Client 向 Region Server 发送写 Hlog 请求;
    2. Region Server 会通过顺序写入磁盘的方式,将 Hlog 存储在 HDFS 上;

    写 MemStore 并返回结果

    1. HBase Client 向 Region Server 发送写 MemStore 请求;
    2. 只有当写 Hlog 和写 MemStore 的请求都成功完成之后,并将反馈给 HBase Client,这时对于整个 HBase Client 写入流程已经完成。

    MemStore 刷盘

    HBase 会根据 MemStore 配置的刷盘策略定时将数据刷新到 StoreFile 中,完成数据持久化存储。

    为什么要把 WAL 加载到 MemStore中,再刷写成 HFile 呢?

    WAL (Write-Ahead-Log) 预写日志是 HBase 的 RegionServer 在处理数据插入和删除过程中用来记录操作内容的一种日志。每次Put、Delete等一条记录时,首先将其数据写入到 RegionServer 对应的 HLog 文件中去。

    而WAL是保存在HDFS上的持久化文件,数据到达 Region 时先写入 WAL,然后被加载到 MemStore 中。这样就算Region宕机了,操作没来得及执行持久化,也可以再重启的时候从 WAL 加载操作并执行。

    那么,我们从写入流程中可以看出,数据进入 HFile 之前就已经被持久化到 WAL了,而 WAL 就是在 HDFS 上的,MemStore 是在内存中的,增加 MemStore 并不能提高写入性能,为什么还要从 WAL 加载到 MemStore中,再刷写成 HFile 呢?

    • 数据需要顺序写入,但 HDFS 是不支持对数据进行修改的;
    • WAL 的持久化为了保证数据的安全性,是无序的;
    • Memstore在内存中维持数据按照row key顺序排列,从而顺序写入磁盘;

    所以 MemStore 的意义在于维持数据按照RowKey的字典序排列,而不是做一个缓存提高写入效率。

    另外,非常欢迎大家加我VX: Abox_0226 ,备注「进群」,有关大数据技术的问题在群里一起探讨。

  • 相关阅读:
    day4:Node.js 核心库
    1.查找存在于数组x但不存在于数组y的元素np.setdiff1d()2.查找两个数组交集以外(不同时存在于两个数组中)的元素np.setxor1d()
    生产工艺审批管理系统java项目开发jsp编程软件myeclipse开发Mysql数据库计算机网页
    机器学习笔记之贝叶斯线性回归(一)线性回归背景介绍
    MyBatis环境搭建&&测试增删改查
    Pyspark学习笔记(五)RDD操作(四)_RDD连接/集合操作
    ywtool network命令
    python爬虫基础-request请求头
    model加载模型部分参数
    Android 12 适配攻略
  • 原文地址:https://www.cnblogs.com/datadance/p/16284653.html