hbase 源码解析之master篇2

HMaster的RPC接口,分两类:

HMaster与RegionServer通讯接口,总共只有两个
-->regionServerStartup: 当regionserver启动时会调用该接口
    -->将发请起求的RS的信息写入serverInfo,注意这里的hostname为master所识别的hostname,而非RS告诉master的
    -->调用serverManager的regionServerStartup方法处理该请求
       -->check该RS是否deadServer,如果是,拒绝start请求,抛出YouAreDeadException异常
       -->check该RS在同样的端口上是否己经启动,如果己经启动,通过serverInfo中的startcode来检查原来的RS是否可以注销,如果不能注销,拒绝请求,抛出PleaseHoldException异常
       -->check该RS与master的时钟是否同步,如果相差太多(默认30s),拒绝请求并抛出ClockOutOfSyncException异常
       -->注册该RS,具体要做的事有:
           -->添加onlineServers
           -->清除原有的serverConnections信息
    -->将回应写入MapWritable结构,传回给RS

-->regionServerReport: regionserver心跳时调用该接口
    -->调用ServerManager的regionServerReport方法,处理report并返回HMsg信息
       -->check该RS是否deadServer,如果是,拒绝report请求,抛出YouAreDeadException异常
       -->在onlineServers中查找该RS
           -->如果找不到
              -->check该RS在同样的端口上是否己经启动,如果己经启动,通过serverInfo中的startcode来检查原来的RS是否可以注销,如果不能注销,拒绝请求,抛出PleaseHoldException异常
              -->注册一个新的RS
              -->如果RS传过来的msg不会空,则抛出PleaseHoldException异常,推迟到下次report时再处理信息
       -->如果找到的serverInfo和传过来的serverInfo的startCode不相同(不太可能发生)
           -->删除serverInfo中的该server信息
           -->向RS发送STOP_REGIONSERVER_ARRAY信号
       -->检查传过来的msg,如果是REGION_SPLIT信号,调用getAssignmentManager的handleSplitReport方法,处理split事件
           -->下线parent region
              -->先把parent region从regionsInTransition状态中删除
              -->清除与该parent region有关的regionPlan
              -->下线该regions
                  -->从regions列表中删除它
                  -->从它所属的serverInfo中删除它对应的regionInfo
           -->从己经zk上获得(parent所在的node)数据
           -->如果它处于closing状态,删除它
              -->从zk上得到它的数据
              -->从hmaster的unassignedNodes中删除它
              -->向zookeeper发请求删除该node
           -->assign两个新的region
              -->先清除regionsInTransition队列中的该子region
              -->向regions中添加该region的regionInfo
              -->向该serverInfo中添加该regionInfo
              -->如果正好有跟该region相关的region plan,删除之
              -->更新所有region plan中目的地是该RS且在regionsInTransition队列中的元素的state信息,这一步的目的是恢复region plan的有效性
           -->如果此时正好用户在disable该region对应的表,需要把它unassign掉
              -->更新该region在regionsInTransition中的状态为PENDING_CLOSE
              -->调用serverManager的sendRegionClose方法,向RS发送colse region信号
       -->如果cluster处理shutdown过程中,且剩余的RS小于等于2了,则发出STOP_REGIONSERVER_ARRAY信号,这是为了保证root和meta所在的RS最后关闭
       
HMaster的其它RPC接口:
-->isMasterRunning:检查master是否己stop
-->enableTable:
    -->启动EnableTableHandler线程,执行handleEnableTable操作
       -->调用setTableState,将table状态置为ENABLING
           -->在zk上创建一个该table的znode
           -->向zk通知该znode状态为ENABLING
           -->更新cache中的该znode状态
       -->读取.META.表,获取该table的所有region
       -->跳过所有己经online的regions
       -->创建一个BulkEnabler对象,用它分配所有regions
           -->创建一个ExecutorService线程池完成这个工作
           -->跳过所有处于transition状态的region
           -->调用AssignmentManager的assign方法,注意这里会尽量延用原来在.META.表中的分配方案
           -->等待分配的线程结束
       -->调用setTableState,将table状态置为ENABLE
-->disableTable:
    -->逻辑基本同enableTable,只是调用调用AssignmentManager的unassign方法
-->createTable:
    -->强制不等待assign分配完成
    -->如果没有指定splitKeys,那么只创建一个region,否则以splitKeys决定startKeys和endKeys,创建多个region
       -->通知zk设置table状态为enabled
       -->创建region,并在hdfs上创建它的目录
       -->向meta所在的RS发送put,以注册.META.信息
       -->close这个region,清空其对应的hlog
       -->调用userregionassgin来分配它(robbin-round方式)
-->modifyTable:
    -->启动modifyHandler线程修改table
       -->通过CatalogTracker找到table对应的所有regionInfo
       -->调用ModifyTableHandler,创建一个Put,把要修改的info放进去,然后调用connection去put
-->deleteTable:
    -->逻辑基本同modifyTable,另外还增加fs上删除目录的操作
-->addColumn:
    -->逻辑基本同modifyTable,另外还增加fs上创建目录的操作
-->modifyColumn:
    -->逻辑基本同modifyTable,另外还增加fs上修改目录的操作
-->deleteColumn:
    -->逻辑基本同modifyTable,另外还增加fs上删除目录的操作

-->shutdown:
    -->调用serverManager的shutdownCluster方法关闭cluster
       -->置clusterShutdown标志
       -->调用master的stop方法
    -->通知zookeeper关闭事件
-->stopMaster:置stop标志,并唤醒其它等待的backup master
-->getClusterStatus:返回cluster的信息,包括:版本号、live和dead的servers、transition的regions
-->move:将一个region移到一个确定的RS上 
-->assign:分配一个region
-->unassign:卸载一个region
-->balance:直接执行一次balance

-->balanceSwitch:是否关闭balance功能(代码写死打开)

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

关注超人学院java免费学习交流群:

时间: 2024-12-22 15:04:52

hbase 源码解析之master篇2的相关文章

hbase 源码解析之master篇1

master启动过程: -->首先初始化HMaster    -->创建一个rpcServer,其中并启动       -->启动一个Listener线程,功能是监听client的请求,将请求放入nio请求队列,逻辑如下:           -->创建n个selector,和一个n个线程的readpool,n由"ipc.server.read.threadpool.size"决定,默认为10           -->读取每个请求的头和内容,将内容放入p

Android网络编程(七)源码解析OkHttp前篇[请求网络]

相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley用法全解析 Android网络编程(四)从源码解析volley Android网络编程(五)OkHttp2.x用法全解析 Android网络编程(六)OkHttp3用法全解析 前言 学会了OkHttp3的用法后,我们当然有必要来了解下OkHttp3的源码,当然现在网上的文章很多,我仍旧希望我这一系列文章篇是最简洁易懂

HBase源码解析(二) HMaster主要类成员解析

本文基于HBase-0.94.1分析HMaster的主要类成员. HMaster是HBase主/从集群架构中的中央节点.通常一个HBase集群存在多个HMaster节点,其中一个为Active Master,其余为Backup Master. HMaster的主要类成员如下: 1.ZooKeeper侦听 这些类都继承自ZookeeperListener. /******************************ZooKeeperListener and ZooKeeperWatcher**

智能聊天机器人实现(源码+解析)

前言: 之前写了一篇  <美女图片采集器 (源码+解析)> 得到了众多朋友的支持, 发现这样系列的教程还是挺受欢迎的, 也激励我继续写下去. 也在那一篇文章中提过, 美女图片采集只是我先前那个完整APP中的一个功能罢了, 还有其他几个比较好玩的尚未开源, 之后有时间会逐一写篇教程. 今天带来的是智能聊天机器人实现(源码+解析), 和上一篇教程一样, 当你没有女朋友的时候, 可以用它来打发时间.这里的API是图灵机器人提供的, 实现一个十分强大的机器人. 具体功能包括: ? 支持聊天对话.智能问

Spring 源码解析之HandlerAdapter源码解析(二)

Spring 源码解析之HandlerAdapter源码解析(二) 前言 看这篇之前需要有Spring 源码解析之HandlerMapping源码解析(一)这篇的基础,这篇主要是把请求流程中的调用controller流程单独拿出来了 解决上篇文章遗留的问题 getHandler(processedRequest) 这个方法是如何查找到对应处理的HandlerExecutionChain和HandlerMapping的,比如说静态资源的处理和请求的处理肯定是不同的HandlerMapping ge

Android网络编程(十一)源码解析Retrofit

相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley用法全解析 Android网络编程(四)从源码解析volley Android网络编程(五)OkHttp2.x用法全解析 Android网络编程(六)OkHttp3用法全解析 Android网络编程(七)源码解析OkHttp前篇[请求网络] Android网络编程(八)源码解析OkHttp后篇[复用连接池] Andr

死磕 java同步系列之Phaser源码解析

问题 (1)Phaser是什么? (2)Phaser具有哪些特性? (3)Phaser相对于CyclicBarrier和CountDownLatch的优势? 简介 Phaser,翻译为阶段,它适用于这样一种场景,一个大任务可以分为多个阶段完成,且每个阶段的任务可以多个线程并发执行,但是必须上一个阶段的任务都完成了才可以执行下一个阶段的任务. 这种场景虽然使用CyclicBarrier或者CountryDownLatch也可以实现,但是要复杂的多.首先,具体需要多少个阶段是可能会变的,其次,每个阶

ExcelReport第二篇:ExcelReport源码解析

导航 目   录:基于NPOI的报表引擎--ExcelReport 上一篇:使用ExcelReport导出Excel 下一篇:扩展元素格式化器 概述 针对上一篇随笔收到的反馈,在展开对ExcelReport源码解析之前,我认为把编写该组件时的想法分享给大家是有必要的. 编写该组件时,思考如下: 1)要实现样式.格式与数据的彻底分离. 为什么要将样式.格式与数据分离呢?恩,你不妨想一想在生成报表时,那些是变的而那些又是不变的.我的结论是:变的是数据. 有了这个想法,很自然的想到用模板去承载不变的部

“Tornado源码解析篇”导读索引

最近花了2周时间断断续续地阅读了 Tornado 的源码,写了“Tornado源码解析”这个系列专题.由于写得比较散,这里简单做一个索引与导读. 为什么要选择 Tornado 这个框架?先给大家讲一个小故事:赌王娱乐城 "[web.py inspired the] web framework we use at FriendFeed [and] the webapp framework that ships with App Engine..." — Brett Taylor, co-