- 浏览: 354353 次
- 性别:
- 来自: 杭州
最新评论
-
penkee:
为何我启动 zookKeeper bookie 10 不能创 ...
bookkeeper安装及测试体验 -
Golden-jin:
1楼也好时髦呀
bookkeeper简单分析 -
xGss2000:
要是减少到300个 region,block就0.04s了。话 ...
多region下的hbase写入问题 -
brandom520:
请问lz,我从hbase0.94版本上的数据导入到0.96.1 ...
在不同版本hdfs集群之间转移数据 -
huanghaifeng1990:
您好,我想请问一下,我执行了会发生OOM溢出的Deflater ...
perftools查看堆外内存并解决hbase内存溢出
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功能(代码写死打开)
评论
移动region要中断服务的。不是物理移动,它只是内存服务移走了。同时cache也清空了
发表评论
-
lease引发的血案
2011-12-19 23:01 6174今天线上出现了一个故障惊出一身冷汗,经过查明原来是lease引 ... -
hbase写被block住的典型案例分析
2011-11-10 22:32 5947今天一个线上集群出现莫名奇妙不能写入数据的bug,lo ... -
在不同版本hdfs集群之间转移数据
2011-10-26 18:56 7243本文仅供记录一下程序心得: 很多人会有这样一个需求:将 ... -
hbase中的deleteColumn
2011-10-26 16:59 5170Delete类的接口有两个方法:deleteColum ... -
splitlog期间丢失数据的问题
2011-10-18 22:26 3710splitlog是保证在重启或rs挂掉后,恢复hlog ... -
hbase中多次加载root及meta的bug
2011-10-18 22:24 3214执行以下case可以见到root或meta被加载两次: ... -
两次hbase丢失数据的故障及原因分析
2011-10-18 18:12 16856hbase的稳定性是近期社区的重要关注点,毕竟稳定的系 ... -
hbase中regionserver常见的oom原因分析
2011-09-15 10:40 9097首先要清楚reginserver中内存是如何使用的。 ... -
hbase的export与import工具
2011-09-01 08:01 11329hbase提供了导出表的方案,将指定的表导出到HDFS ... -
disable table失败的处理
2011-08-30 20:02 4352相信每一个维护hbase集群的运维人员一定碰到过dis ... -
使用zookeeper管理多个hbase集群
2011-08-16 15:30 18183zookeeper是hbase集群的"协调器 ... -
一次奇异的getRegionInfo异常定位
2011-08-10 19:55 2532今天在线上环境的 ... -
多region下的hbase写入问题
2011-08-10 13:13 9255最近在集群上发现hbase写入性能受到较大下降,测试环 ... -
hbase上应用lucene创建索引及检索
2011-07-21 17:14 11644hbasene(https://github.com/ ... -
hbase-0.90.4的主要更新
2011-07-15 22:15 2833apache邮件列表中提 ... -
hbase中缓存的优先级
2011-06-15 16:30 4142今天同事问到hbase中in-memory属性的作用, ... -
hbase交流记录
2011-06-02 10:34 3548前几天和公司的同事杨传辉(http://www.nosqlno ... -
secondary index for hbase
2011-05-07 23:05 5806最近因为业务需求 ... -
hdfs上的append测试
2011-05-04 23:42 6591hbase在写入数据之前会先写hlog,hlog目前是se ... -
hbase写入性能影响续
2011-04-18 15:28 10613今天发现hbase在写入一张新表时,写入过程中时常会出 ...
相关推荐
HBase源码分析揭示了HBase在RPC通信机制方面的一些关键技术点,这包括了角色分配、通信信道建立、通信接口协议定义、对象序列化、传输控制和会话管理,以及在传输过程中可能出现的错误处理和重试机制。 HBase中的...
三、HBase源码解析 1. **Region分配与负载均衡**:在`org.apache.hadoop.hbase.master`包下,RegionServerTracker类负责监控Region服务器状态,LoadBalancer类实现Region的负载均衡策略。 2. **元数据管理**:元...
《HBase实战源码》是针对Apache HBase这一分布式、高性能、基于列族的NoSQL数据库的深度解析书籍。源码分析是理解HBase工作原理和技术细节的重要途径。HBase在大数据领域扮演着关键角色,它能够处理海量数据并提供...
#### 二、HBase源码解析——Master篇 ##### 2.1 Master启动过程 - **初始化HMaster**:Master启动时,首先进行初始化操作。 - **创建RPC Server**:接着创建一个RPC Server,并启动它。 - **监听客户端请求**:...
HBase,作为Apache的一个开源项目,是构建在Hadoop之上的分布式、版本化、列族式的NoSQL数据库,它提供了高可靠性、高性能、可伸缩的数据存储解决方案。本文将基于hbase-0.98.23的源代码,深入解析其内部机制,帮助...
《深入剖析HBase 0.98.12.1源码》 HBase,作为Apache软件基金会的一个开源项目,是构建在Hadoop文件系统(HDFS)之上的分布式列式数据库,它提供了高可靠性、高性能、可伸缩的数据存储解决方案。HBase 0.98.12.1是...
《深入理解HBase:从HBaseTest源码解析开始》 HBase,作为Apache软件基金会的一个开源项目,是构建在Hadoop之上的分布式列式数据库,特别适合处理大规模数据。其设计灵感来源于Google的Bigtable,提供高吞吐量的...
《深入解析Hadoop之HBase 0.99.2源码分析》 在当今的信息化社会,大数据处理已经成为企业核心竞争力的关键要素。Hadoop作为开源大数据处理框架的领头羊,其生态中的HBase更是备受关注。HBase是基于Google Bigtable...
三、HBase源码解析 3.1 数据模型 HBase的数据模型在源码中主要体现在`org.apache.hadoop.hbase.regionserver`包下的`Region`类,它是实际存储数据的单元,包含对行、列的管理。 3.2 操作API 客户端与HBase交互的...
《HBase 0.98.12.1 on Hadoop 2:深入解析与实践》 HBase,全称为Hadoop Base,是一款基于Google Bigtable理念设计的开源分布式数据库,是Apache软件基金会的重要项目之一。它专为大规模数据集(数十亿行,百万列)...
在本分享总结中,我们将深入探讨“HBase_介绍”和“HBase云存储”的相关主题,这将涵盖HBase的基础知识、其架构原理、在云计算环境中的应用以及相关的源码解析。首先,我们从HBase的基本概念和功能入手。 HBase是一...
《HBase分布式数据库v2.2.6稳定版源码解析》 HBase,作为Apache软件基金会的一个开源项目,是构建在Hadoop文件系统(HDFS)之上的分布式列式数据库,特别适合处理大规模的数据存储。HBase v2.2.6作为其稳定版本,为...
《HBase 1.3.6源码解析与大数据存储技术探析》 HBase,全称为Apache HBase,是一款开源的、分布式的、版本化的非关系型数据库(NoSQL数据库),它构建于Hadoop文件系统(HDFS)之上,是大数据处理领域的重要组件。...
《HBase 0.90.4:分布式存储的魅力与技术深度解析》 HBase,作为Apache软件基金会的重要项目之一,是一款高度可扩展的、基于列族的分布式数据库,尤其适用于处理海量数据。HBase 0.90.4是其历史版本,尽管现在已经...
在大数据处理领域,Apache HBase是一个分布式的、版本化的NoSQL数据库,它构建于Hadoop之上,特别适合处理海量结构化数据。这篇博客“Hbase调用Java API实现批量导入操作”聚焦于如何利用Java编程语言高效地向HBase...
**源码解析** HBase的源码是用Java编写的,对于开发者来说,深入研究源码可以帮助理解其内部机制和优化策略。关键模块包括: 1. **RegionServer**:处理客户端请求,管理数据分区(Region)。 2. **Master**:负责...
而HBase是构建在Hadoop文件系统(HDFS)之上,提供高可靠、高性能、列式存储、支持多版本、实时读写的分布式数据库,适用于大数据实时查询场景。 Java在大数据生态中扮演着连接不同组件的重要角色,它提供了丰富的...
《HBase权威指南》是HBase领域的经典著作,旨在深入解析这款分布式大数据存储系统的方方面面。随书提供的源代码是理解书中理论与实践结合的关键。在本文中,我们将围绕HBase的核心概念、架构以及如何通过源代码学习...
七、源码解析 对于希望深入了解HBase的开发者,阅读源码是必不可少的。HBase的开源特性使其内部机制透明,可以通过源码学习其数据分布、并发控制、故障恢复等机制。 总结,HBase是一款强大的大数据存储解决方案,...