Hmaster
Upcoming SlideShare
Loading in...5
×
 

Hmaster

on

  • 1,888 views

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

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

Statistics

Views

Total Views
1,888
Views on SlideShare
1,128
Embed Views
760

Actions

Likes
2
Downloads
27
Comments
0

3 Embeds 760

http://qa.alibaba.com 749
http://119.38.217.40 10
http://feed.feedsky.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Hmaster Hmaster Presentation Transcript

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