Hmaster

2,100 views
1,945 views

Published on

HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,100
On SlideShare
0
From Embeds
0
Number of Embeds
767
Actions
Shares
0
Downloads
28
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Hmaster

  1. 1. Hmaster<br />夏明超<br />
  2. 2. HMaster<br />HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作:<br />1.       管理用户对Table的增、删、改、查操作<br />2.       管理HRegionServer的负载均衡,调整Region分布<br />3.       在Region Split后,负责新Region的分配<br />4.       在HRegionServer停机后,负责失效HRegionServer上的Regions迁移<br />5. HLOG的清理和切分,意外停机以后的恢复;<br />
  3. 3. HMASTER启动过程<br />(A)启动rpc服务;<br />(B)如果使用的是安全hadoop集群,使用配置hbase.master.keytab.file和 hbase.master.kerberos.principal进行登录验证;<br />(C)创建zoopkeeper watch连接zoopkeeper,创建MasterMetrics保存HMASTER的相关数据;<br />(D)连接zoopkeeper查看是否是为primary master,如果不是就一直阻塞在这里,直到zoopkeeper通知其为一个primay master;<br />(E)启动各个服务线程,等待所有的region server报告其状态;<br />(F) 查看是否存在不属于任何RS的HLOG,如果有把这类日志写入新的日志文件,于此同时进行写RS的操作;<br />(G)分配root region和meta reigion;<br />(H)如果region数目为0,就启动faliover,其实是把startup也放到failover这分支里面;<br />
  4. 4. LSM-tree<br />
  5. 5. Hbase的LSM-tree<br />Hlog存储了所有对HStore的修改,是hbase的write-ahead-log的具体实现,每个RS只有一个HLOG,HLOG按照时间次序进行排列;<br />HLOG实际上很重要的,构成整个hbase的基础数据结构是LSM-TREE的重要一部分;<br />在Hbase里面LSM tree这种结构其实就是由HLog + Memstore + StoreFile构成,HLog保存了顺序写入磁盘的日志,Memstore能够保存最近的数据,StoreFile负责存储Memstore flush的数据,另外背后有一些服务线程默默的做了很多事情,比如针对store files的compaction, 针对region的split, hlog file的roller等等。<br />
  6. 6. HLOG构成<br />HLog File 是一个Sequence File,只能在文件的末尾添加内容。除了文件头以外,HLog File 由一条条的HLog.Entry构成。可以说Entry是HLog的基本组成部分,也是Read 和 Write的基本单位。<br />Entry由两个部分组成:HLogKey和WALEdit。<br />HLogKey包含以下类容:<br />private byte [] encodedRegionName;private byte [] tablename;private long logSeqNum;// Time at which this edit was written.private long writeTime;private byte clusterId;<br />
  7. 7. HMASTER清除Hlog<br />Hlog的生命周期:RS 创建HLog File -> RS append HLog File -> 关闭HLog File -> File Max SeqNum小于所有StoreFile的SeqNum ->  转移File至.oldlog文件夹 -> 删除HLog File<br />Hbase写入过程:HLOGmemstore flush file(对Hfile的轻量级包装)<br />
  8. 8. loadblance<br />默认循环时间为300秒;<br />使用红黑树保存RegionServer的对应信息;<br /> 取region平均数,如果一台机器的region数目大于平均数,就移除多余的;如果一台机器region数目小于平均数,就把多出regoin移动过来;<br />
  9. 9. 负载均衡过程<br />构造一棵红黑树,其比较算法使用的是load的大小<br />首先得到平均数值和最大最小数值<br />按照load从大到小遍历serversByLoad这个红黑树,找出所有load大于max的,进行移除<br />按照load从小到大遍历,找出所有load小于min的,作为regoin要存放的地方<br />
  10. 10. 管理region<br />Root和meta也放在region中,理论上root-region也可以split;<br />User-region<br />
  11. 11. Meta扫描<br />  meta扫描线程为守候线程,默认循环时间为300秒 ,meta扫描线程的作用是定期清理己经split的region并将它删除,工作过程如下: <br />              --> 连接meta server,scan表的info信息,扫描所有region,从region info中读出是否split的信息 <br />              -->如果己经split,则先获取splitA和splitB的region info <br />              -->如果splitA和splitB的reference都不再指向父region了(从它们的regionPath可以得出),则将父region删除掉,删掉流程如下: <br />              --> 将region的状态置为offline <br />              -->将该region从regionsInTransition中删除掉 <br />              --> 将该region从regionPlan中删除掉,避免再进行balance之类的操作 <br />              -->将该region的region info从AssignmentManager的regions树中以及AssignmentManager中存放的每个servers中删掉 <br />              -->删除meta表里的该region的目录 <br />              -->通知meta region server删除该region <br />
  12. 12. 表管理<br />创建表的步骤create table<br />(1)在zk中设置表的状态为enable;<br />(2)创建一个空hreigion;<br />(3)在meta中新增一个region-row;<br />(4)region写入磁盘,同时关闭对hlog的打开;<br />(5)使用轮叫调度(Round-Robin Scheduling)分配region;<br />(6)如果设置了sync标志,则等待regions的分配;<br />

×