HBase里表的create/disable/enable/drop 过程

一、相关背景

      在HBase里、类似于传统关系型数据库的DDL操作的RPC请求差不多都是由HBase里面的HMaster执行的。当RPC请求发送到HMaster所在的节点之后,由MasterRpcServices调用HMaster里面对应的方法进行处理。


相关RPC请求在Server端的处理类图


      在HMaster中,通过调用ExecutorService里面的submit方法,将相关处理线程(EventHandler)提交给线程池处理。其中处理创建表的线程就是上面的CreateTableHandler。上面的prepare方法主要可以用于一些基本的检测,而process方法则是处理相关逻辑的方法。

二、create过程

      create的过程主要是process方法通过调用handleCreateTable来实现,具体过程代码中也有非常详细的注释。主要就是创建相关的目录结构,然后更新hbase:meta表里面的相关信息,接着随机分配预定义的分区(当然要创建者指定了相关的分区),还有添加相关副本以及zookeeper里面的信息,最后还要更新HMaster里面的相关表缓存。

三、disable过程

      disable过程主要是通过DisableTableHandler来完成的,比如这里面的prepare过程就会检查要disable的不是hbase:meta表。而disable过程主要是通过handleDisableTable来完成的,在hbase.bulk.assignment.waiton.empty.rit(默认五分钟)内,必须通过HMaster的assignmentManager来负责将所有的region进行批量unassign操作,否则就超时了。当然还需要更新zookeeper里面的信息。

四、enable过程

      enable过程主要是通过EnableTableHandler类来完成。首先要获取相对应的region信息,如果是meta表,则直接通过构造方法来构造相应的locator(八成是启动时要enable meta表吧,以后再再细看);如果是别的表则通过meta表来获取相应的位置信息。还会考虑replica相关的东西(这个以后有机会再单独介绍),最后根据所有的regionserver执行批量分配所有的region。当然整个过程也会涉及zookeeper信息的更新。这个批量分配过程也是按照hbase.bulk.assignment.waiton.empty.rit为超时时间的。也可以根据hbase.bulk.assignment.threadpool.size来控制批量分配的线程数(默认20个)。

五、drop过程

      drop过程主要通过DeleteTableHandler类来完成。drop以及增加列族这类操作比较特别、比如需要上锁等等,因此所有相关handler都继承自TableEventHandler,并在父类中通过masterService进行上锁操作。在具体的处理逻辑中,首先会考虑到region可能正在处于transition过程,所以需要等待一段时间(超过hbase.master.wait.on.region则视为超时),接着删除hbase:meta以及HDFS中的数据,然后就是删除一些缓存信息,例如HMaster中关于表的缓存、region缓存,最后还会调用cleanAnyRemainingRows();方法确认hbase:meta表里面的所有信息完全删除。当然有上锁操作就会有解锁操作,父类TableEventHandler的finally块中会release相关的锁。

六、总结

      以上博客都是关于HBase社区1.0.0版的个人总结,如有不足之处欢迎指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 初次接触HBase的读者,建议先阅读浅析HBase:为高效的可扩展大规模分布式系统而生 HBase的构成 物理上来...
    耀凯考前突击大师阅读 10,660评论 0 12
  • 最近在逐步跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hb...
    飞鸿无痕阅读 50,456评论 19 272
  • HBase那些事 @(大数据工程学院)[HBase, Hadoop, 优化, HadoopChen, hbase]...
    分痴阅读 9,416评论 3 17
  • 1. HBase介绍,Hbase是什么? HBase -- Hadoop Database ,是一个高可靠、高性能...
    奉先阅读 9,228评论 1 36
  • HBase存储架构图 HBase Master 为Region server分配region 负责Region s...
    kimibob阅读 10,929评论 0 52