这是我参与【第四届青训营】笔记创造活动的第九天。
HMaster主要组件
CatalogJanitor
定期扫描元数据hbase:meta的变化,回收无用的region(仅当没有region-in-transition时)。
scan方法执行扫描、回收操作:
- 扫描一遍hbase:meta找出可回收的region,检查元数据一致性并生成报告实例
- 已完成merge或split的region都可被回收,即子目录/父目录没有reference文件后
-
创建GCMultipleMergedRegionsProcedure/GCRegionProcedure异步回收regions
-
GCMultipleMergedRegionsProcedure步骤:
- merge的两个源region分别创建GCRegionProcedure删除region数据
- 删除merge生成region元信息的merge qualifiers(info:mergeN)
-
GCRegionProcedure步骤:
- archive要回收region的HFiles
- 删除region对应的WAL
-
assignmentManager删除region state
-
meta表删除该region记录
-
masterService、FavoredNodesManager删除该region
-
AssignmentManager
管理region分配,processAssignQueue方法每当pendingAssignQueue放满RegionStateNode时批量处理。单独启动daemon线程循环处理。
processAssignmentPlans方法雇用LoadBalancer
- 首先尝试尽量保持现有分配
- 将分配plan的目标server region location更新到对应RegionStateNode中
- 将regionNNode的ProcedureEvent放入队列,统一唤醒所有regionNodes的events上等待的procedures
- 不保持原有分配的通过loadbalancer的round-robin策略分配(原则是不能降低availability)
- 分配失败的塞回pendingAssignQueue下次重新处理
setupRIT方法处理RIT,仅仅是设置RegionStateNode的this.procedure和ritMap
HBase集群架构
Zookeeper
提供分布式一致性的元数据管理服务。HBase使用Zookeeper实现master节点信息登记、master节点选主、RegionServer信息登记、分布式任务管理等功能。
HMaster
元信息管理组件,以及集群调度、保活等功能。通常部署一个主节点和一到多个备节点,通过Zookeeper选主。
RegionServer
提供数据读写服务,每个实例负责一段不重叠的连续rowkey范围内的数据。
ThriftServer
提供一层以Thrift协议访问数据的代理层