zoukankan      html  css  js  c++  java
  • hbase-16-写入流程

    Hbase 写入流程大致分为三个步骤:

    1.客户端请求

    1. 首先在meta cache 根据rowKey查找该rowKey对应的Region Server,如果有则直接发送请求到RegionServer。
    2. 如果客户端缓存中没有查到对应的rowkey信息,需要首先到ZooKeeper上/hbase-root/meta-region-server节点查找HBase元数据表所在的RegionServer。
    3. 向hbase:meta所在的RegionServer发送查询请求,在元数据表中查找rowkey所在的RegionServer以及Region信息,并缓存。
    4. 发送给目标RegionServer,Region Server接收到请求之后会解析出具体的Region信息,查到对应的Region对象,并将数据写入目标Region的MemStore中。

    用户提交put请求后,HBase客户端会将写入的数据添加到本地缓冲区中,符合一定条件就会通过AsyncProcess异步批量提交。HBase默认设置autoflush=true,表示put请求直接会提交给服务器进行处理;用户可以设置autoflush=false,这样,put请求会首先放到本地缓冲区,等到本地缓冲区大小超过一定阈值(默认为2M,可以通过配置文件配置)之后才会提交。

    2.Region写入

    1)Acquire locks :HBase中使用行锁保证对同一行数据的更新都是互斥操作,用以保证更新的原子性,要么更新成功,要么更新失败。

    2)Update LATEST_TIMESTAMP timestamps :更新所有待写入(更新)KeyValue的时间戳为当前系统时间。

    3)Build WAL edit: 在内存中构建WALEdit对象,为了保证Region级别事务的写入原子性,一次写入操作中所有KeyValue会构建成一条WALEdit记录。

    4)将WALEdit顺序写入Hlog中。

    5)Write back to MemStore:写入WAL之后再将数据写入MemStore。

    6)释放行锁。

    7)Sync WAL: HLog真正sync到HDFS,在释放行锁之后执行sync操作是为了尽量减少持锁时间,提升写性能。如果sync失败,执行回滚操作将MemStore中已经写入的数据移除。

    8)结束写事务。
    image
    doMiniBatchMutation 包含这8个步骤。

    3.MemStore Flush阶段

    当MemStrore 的数据达到一定阈值,会flush

    要掌握:

    1. MemStore Flush的触发时机
    2. MemStore Flush的整体流程
    3. HFile的构建流程
    4. HFile文件格式的构建
    5. 布隆过滤器的构建
    6. HFile索引的构建
    7. 元数据的构建
    不要小瞧女程序员
  • 相关阅读:
    进程的挂起及恢复
    移植 iconv
    产生不重复随机数
    Javascript数据验证类
    简单设置让EasyUI显示中文,日期选择框格式为yyyyMMdd格式
    NPOI开源组件(操作Execl)创建Workbook和Sheet,创建单元格,设置行列样式等
    PL/SQL中流程控制语句 和Oracle临时表
    c#字符串中包含的运算符按正常计算 例如按四则运算等,类似公式计算,很好很强大
    判断一个数组中的值是否包含在另一个数组中
    利用NPOI开源的读写Excel、WORD等微软OLE2组件读写execl,控制样式或单元格
  • 原文地址:https://www.cnblogs.com/shix0909/p/15070519.html
Copyright © 2011-2022 走看看