zoukankan      html  css  js  c++  java
  • HBase 数据读写流程

    HBase 数据读写流程

    读数据

    HBase的表是按行拆分为一个个 region 块儿,这些块儿被放置在各个 regionserver 中

    假设现在想在用户表中获取 row key 为 row0001 的用户信息

    要想取得这条数据,就需要先找到含有此条记录的 region

    HBase 是如何定位到具体 regionserver 中的具体 region 的呢?

    HBase 中有一个内置的 hbase:meta 表,其中记录了所有表的所有 region 的详细信息

    例如 region 的 开始KEY结束KEY所在server的地址……

    hbase:meta 表就像一个目录,通过他可以快速定位数据的实际位置

    hbase:meta 表是存储在 ZooKeeper 中的,所以客户端就需要先访问 ZooKeeper,获取到 hbase:meta,从中查询出目标数据是在哪个 regionserver 中的哪个 region 中,然后到 region 中进行读取

    我们可能会感觉这个寻址路径有点长,所以客户端会将查询过的位置信息保存缓存起来,方便以后快速读取

    写数据

    写操作会被分配到对应的 regionserver 进行处理,先回顾一下 regionserver 的结构

    从客户端来看,写操作比较简单,写请求到达 regionserver 后,这些修改会先被写到 MemStore HLog 中,成功写入后便会通知客户端写入完成了

    MemStore 是内存缓存,保存最近更新的数据
    HLog 是日志文件,记录着所有的更新操作

    对于系统来说,写操作还没完,系统会定期调用刷新缓存的方法,把MemStore中的内容写入文件,生成一个新的 StoreFile,然后把缓存清空,并在HLog中做一个标记,表明上面的内容已经写入文件

    这样,数据就真正落地了,但写操作会引发一些后续问题,例如HLog日志文件越来越大了、StoreFile越来越多了、当前region越来越大了,所以,系统有还有更多的工作需要做

    • 系统会定期清理HLog日志文件,把其中已经写入文件的记录删除

    •  StoreFile 文件数量超过设定值时,会触发合并操作,合并成一个大文件,如果这个大文件超过了设定值,会再被分割开

    • region的大小达到阈值时,会被切分开,生成一个新的regionHMaster会对其进行管理,分配到合适的 regionserver

    • region的变化后,系统还需要对 hbase:meta 表进行维护

  • 相关阅读:
    js中删除数组元素的几种方法
    js中的prototype
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据
    angularjs事件传递$on、$emit和$broadcast
    cron表达式
    angularjs中的时间格式化过滤
    angularjs中的$q
    IOS 错误
    Swift 错误
    IOS 控件
  • 原文地址:https://www.cnblogs.com/jun1019/p/6260523.html
Copyright © 2011-2022 走看看