欢迎投稿

今日深度:

HBase(七): HBase体系结构剖析(下),

HBase(七): HBase体系结构剖析(下),


HBase(七): HBase体系结构剖析(下)

Posted on 2016-09-10 22:18 天戈朱 阅读(1019) 评论(0) 编辑 收藏

目录:

  • write
  • Compaction
  • splite
  • read

Write:


  • 当客户端发起一个Put请求时,首先根据RowKey寻址,从hbase:meta表中查出该Put数据最终需要去的HRegionServer
  • 客户端将Put请求发送给相应的HRegionServer,在HRegionServer中它首先会将该Put操作写入WAL日志文件中(Flush到磁盘中),如下图:
  • 写完WAL日志文件后,HRegionServer根据Put中的TableName和RowKey找到对应的HRegion,并根据Column Family找到对应的HStore
  • 将Put数据写入到该HStore的MemStore中。此时写成功,并返回通知客户端
  • 上一节介绍过,MemStore是一个In Memory Sorted Buffer,在每个HStore中都有一个MemStore,即它是一个HRegion的一个Column Family对应一个实例。
  • 它的排列顺序以RowKey、Column Family、Column的顺序以及Timestamp的倒序,如下示意图:
  • 每一次Put请求都是先写入到MemStore中,当MemStore满后会Flush成一个新的StoreFile(底层实现是HFile),即一个HStore(Column Family)可以有0个或多个StoreFile(HFile)
  • 注意:MemStore的最小Flush单元是HRegion而不是单个MemStore, 这就是建议使用单列族的原因,太多的Column Family一起Flush会引起性能问题
  • MemStore触发Flush动作的时机:
  • 在MemStore Flush过程中,还会在尾部追加一些meta数据,其中就包括Flush时最大的WAL sequence值,以告诉HBase这个StoreFile写入的最新数据的序列,那么在Recover时就直到从哪里开始。在HRegion启动时,这个sequence会被读取,并取最大的作为下一次更新时的起始sequence,如下图:

Compaction:


  • MemStore每次Flush会创建新的HFile,而过多的HFile会引起读的性能问题,HBase采用Compaction机制来解决这个问题
  • HBase中Compaction分为两种:Minor Compaction和Major Compaction
  • 修改Hbase配置文件可以控制compaction行为

splite:


  • 最初,一个Table只有一个HRegion,随着数据写入增加,如果一个HRegion到达一定的大小,就需要Split成两个HRegion,这个大小由hbase.hregion.max.filesize指定
  • split时,两个新的HRegion会在同一个HRegionServer中创建,它们各自包含父HRegion一半的数据,当Split完成后,父HRegion会下线,而新的两个子HRegion会向HMaster注册上线
  • 处于负载均衡的考虑,这两个新的HRegion可能会被HMaster分配到其他的HRegionServer,示意图如下:
  • 创建child region
  • 向系统meta server中写入parent region split完毕的信息,并将child region的名字一并写入(split状态在meta层面持久化)
  • 分别Open 两个child region,主要包含以下几个步骤:
  • 将parent region的状态由SPLITTING转为SPLIT,zookeeper会负责通知master开始处理split事件,master开始offline parent region,并online child regions
  • Worker等待master处理完毕之后,确认child regions都已经online,split结束
  •  read:


    • 根据Rowkey寻址(详情见上一节寻址部分),如下图:
    • 获取数据顺序规则,如下图:

     

    参考资料:


    • http://hortonworks.com/blog/apache-hbase-region-splitting-and-merging/
    • https://www.mapr.com/blog/in-depth-look-hbase-architecture#.VdNSN6Yp3qx

     

    分类: HBase

    标签: HBase

    刷新评论刷新页面返回顶部

    注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。

    【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库!
    【活动】申请成为华为云云享专家 尊享9大权益
    【腾讯云】拼团福利,AMD云服务器8元/月

    www.htsjk.Com true http://www.htsjk.com/hbase/38412.html NewsArticle HBase(七): HBase体系结构剖析(下), HBase(七): HBase体系结构剖析(下) Posted on 2016-09-10 22:18 天戈朱 阅读(1019) 评论(0) 编辑 收藏 目录: write Compaction splite read Write: 当客户端发起一个...
    相关文章
      暂无相关文章
    评论暂时关闭