`
lc_koven
  • 浏览: 352566 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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功能(代码写死打开)

分享到:
评论
5 楼 lin_FS 2012-03-31  
建立新表的过程:首先client向Hbase中写入一个新表的数据(这个表在Hbase中不存在),但是client端不知道这个表不存在,会找-TOOR-,找.MATA.找不到指定的region,然胡client向Hmaster发送建表请求。我这么理解对吗?
4 楼 lin_FS 2012-03-31  
我想对您说两个字 “透彻!”,如果再加两个字“厉害!”,再再加两个字“佩服!”,再再再加两个字“呵呵!”。
3 楼 jichre 2012-01-04  
猜测,然后了解,明白。
2 楼 lc_koven 2012-01-03  
jichre 写道
这篇没看到balancer的真正执行计划,因为我很好奇,如何不中断服务移动region的,hbase最近第一次看,还不是很明白,region是不是真的是物理移动,还是其实只是将这个region的所有权移交给其它server,底层是hdfs,物理移动话,视乎没有必要,向楼主请教了。

移动region要中断服务的。不是物理移动,它只是内存服务移走了。同时cache也清空了
1 楼 jichre 2011-12-31  
这篇没看到balancer的真正执行计划,因为我很好奇,如何不中断服务移动region的,hbase最近第一次看,还不是很明白,region是不是真的是物理移动,还是其实只是将这个region的所有权移交给其它server,底层是hdfs,物理移动话,视乎没有必要,向楼主请教了。

相关推荐

    HBase源码分析

    HBase源码分析揭示了HBase在RPC通信机制方面的一些关键技术点,这包括了角色分配、通信信道建立、通信接口协议定义、对象序列化、传输控制和会话管理,以及在传输过程中可能出现的错误处理和重试机制。 HBase中的...

    hbase 源码包

    三、HBase源码解析 1. **Region分配与负载均衡**:在`org.apache.hadoop.hbase.master`包下,RegionServerTracker类负责监控Region服务器状态,LoadBalancer类实现Region的负载均衡策略。 2. **元数据管理**:元...

    HBase实战源码

    《HBase实战源码》是针对Apache HBase这一分布式、高性能、基于列族的NoSQL数据库的深度解析书籍。源码分析是理解HBase工作原理和技术细节的重要途径。HBase在大数据领域扮演着关键角色,它能够处理海量数据并提供...

    hbase源码分析

    #### 二、HBase源码解析——Master篇 ##### 2.1 Master启动过程 - **初始化HMaster**:Master启动时,首先进行初始化操作。 - **创建RPC Server**:接着创建一个RPC Server,并启动它。 - **监听客户端请求**:...

    HBase源代码 hbase-0.98.23

    HBase,作为Apache的一个开源项目,是构建在Hadoop之上的分布式、版本化、列族式的NoSQL数据库,它提供了高可靠性、高性能、可伸缩的数据存储解决方案。本文将基于hbase-0.98.23的源代码,深入解析其内部机制,帮助...

    hbase-0.98.12.1-src.tar.gz

    《深入剖析HBase 0.98.12.1源码》 HBase,作为Apache软件基金会的一个开源项目,是构建在Hadoop文件系统(HDFS)之上的分布式列式数据库,它提供了高可靠性、高性能、可伸缩的数据存储解决方案。HBase 0.98.12.1是...

    HBaseTest_hbase_源码

    《深入理解HBase:从HBaseTest源码解析开始》 HBase,作为Apache软件基金会的一个开源项目,是构建在Hadoop之上的分布式列式数据库,特别适合处理大规模数据。其设计灵感来源于Google的Bigtable,提供高吞吐量的...

    最近很火的大数据Hadoop之Hbase0.99.2最新版源码

    《深入解析Hadoop之HBase 0.99.2源码分析》 在当今的信息化社会,大数据处理已经成为企业核心竞争力的关键要素。Hadoop作为开源大数据处理框架的领头羊,其生态中的HBase更是备受关注。HBase是基于Google Bigtable...

    hbase-1.2.6-bin+src.tar.rar

    三、HBase源码解析 3.1 数据模型 HBase的数据模型在源码中主要体现在`org.apache.hadoop.hbase.regionserver`包下的`Region`类,它是实际存储数据的单元,包含对行、列的管理。 3.2 操作API 客户端与HBase交互的...

    hbase-0.98.12.1-hadoop2-bin.tar.gz

    《HBase 0.98.12.1 on Hadoop 2:深入解析与实践》 HBase,全称为Hadoop Base,是一款基于Google Bigtable理念设计的开源分布式数据库,是Apache软件基金会的重要项目之一。它专为大规模数据集(数十亿行,百万列)...

    \"HBase_介绍和HBase云存储\"分享总结

    在本分享总结中,我们将深入探讨“HBase_介绍”和“HBase云存储”的相关主题,这将涵盖HBase的基础知识、其架构原理、在云计算环境中的应用以及相关的源码解析。首先,我们从HBase的基本概念和功能入手。 HBase是一...

    Hbase分布式数据库 v2.2.6 稳定版-源码.zip

    《HBase分布式数据库v2.2.6稳定版源码解析》 HBase,作为Apache软件基金会的一个开源项目,是构建在Hadoop文件系统(HDFS)之上的分布式列式数据库,特别适合处理大规模的数据存储。HBase v2.2.6作为其稳定版本,为...

    hbase-1.3.6-src.tar.gz

    《HBase 1.3.6源码解析与大数据存储技术探析》 HBase,全称为Apache HBase,是一款开源的、分布式的、版本化的非关系型数据库(NoSQL数据库),它构建于Hadoop文件系统(HDFS)之上,是大数据处理领域的重要组件。...

    Hbase调用JavaAPI实现批量导入操作

    在大数据处理领域,Apache HBase是一个分布式的、版本化的NoSQL数据库,它构建于Hadoop之上,特别适合处理海量结构化数据。这篇博客“Hbase调用Java API实现批量导入操作”聚焦于如何利用Java编程语言高效地向HBase...

    hbase-0.90.4

    《HBase 0.90.4:分布式存储的魅力与技术深度解析》 HBase,作为Apache软件基金会的重要项目之一,是一款高度可扩展的、基于列族的分布式数据库,尤其适用于处理海量数据。HBase 0.90.4是其历史版本,尽管现在已经...

    Introduction of HBase

    **源码解析** HBase的源码是用Java编写的,对于开发者来说,深入研究源码可以帮助理解其内部机制和优化策略。关键模块包括: 1. **RegionServer**:处理客户端请求,管理数据分区(Region)。 2. **Master**:负责...

    java解决hive快速导数据到Hbase代码

    而HBase是构建在Hadoop文件系统(HDFS)之上,提供高可靠、高性能、列式存储、支持多版本、实时读写的分布式数据库,适用于大数据实时查询场景。 Java在大数据生态中扮演着连接不同组件的重要角色,它提供了丰富的...

    hbase权威指南源代码下载

    《HBase权威指南》是HBase领域的经典著作,旨在深入解析这款分布式大数据存储系统的方方面面。随书提供的源代码是理解书中理论与实践结合的关键。在本文中,我们将围绕HBase的核心概念、架构以及如何通过源代码学习...

    Hbase实战

    七、源码解析 对于希望深入了解HBase的开发者,阅读源码是必不可少的。HBase的开源特性使其内部机制透明,可以通过源码学习其数据分布、并发控制、故障恢复等机制。 总结,HBase是一款强大的大数据存储解决方案,...

Global site tag (gtag.js) - Google Analytics