近日对hbase进行稳定性测试,因为主机资源有限,所以使用多个虚拟机搭了一个分布式hbase集群,无意中停了一个虚拟机,然后启动hbase发现整个集群无法启动,hmaster报了一个网络异常之后,就直接退出了。
于是开始跟踪hmaster启动部分的源码。
hmaster的大郅步骤:
1.连接zk,创建master node的watcher
2.检查root region是否存在
3.启动对zk root node和meta node的track
4 分配root 到对应的regionServer
5 分配meta 到对应的regionServer
现在就卡在了分配meta 到对应的regionServer这一步。
查看源码
private HRegionInterface getMetaServerConnection(boolean refresh)
throws IOException, InterruptedException {
synchronized (metaAvailable) {
if (metaAvailable.get()) {
HRegionInterface current = getCachedConnection(metaLocation);
if (!refresh) {
return current;
}
if (verifyRegionLocation(current, this.metaLocation, META_REGION)) {
return current;
}
resetMetaLocation();
}
HRegionInterface rootConnection = getRootServerConnection();
if (rootConnection == null) {
return null;
}
HServerAddress newLocation = MetaReader.readMetaLocation(rootConnection);
if (newLocation == null) {
return null;
}
HRegionInterface newConnection = getCachedConnection(newLocation);//此处抛出IOException
if (verifyRegionLocation(newConnection, this.metaLocation, META_REGION)) {
setMetaLocation(newLocation);
return newConnection;
}
return null;
}
}
现在进行故障回放:
在hbase集群停止运行状态下,META对应的regionserver虚拟机被挂了,于是hmaster启动时,根据root表找到对应meta所以在regionserver地址,然后建立到对应regionserver的连接,但此时这台regionserver已经down了,连接失败,抛出网络层的IOException,于是hmaster无法启动。
虽然这种故障出现的概率不高,因为只有在hbase集群停止的情况下,刚好对应的metaserver挂了,所以才会造成meta表无法指定regionserver。但考虑海量数据情况下,meta表也会分裂,从而可能存在多台regionserver上,出现这种故障的概率就高了。
所以考虑对代码进行,catch IOException进行另外指定
HRegionInterface newConnection = null;
try {
newConnection = getCachedConnection(newLocation);
} catch (IOException e) {
// 从当前已经启动成功的regionserver中,找一台机器来接管meta表
}
分享到:
相关推荐
HBase 元数据修复工具包。 ①修改 jar 包中的application.properties,重点是 zookeeper.address、zookeeper.nodeParent、hdfs....③开始修复 `java -jar -Drepair.tableName=表名 hbase-meta-repair-hbase-2.0.2.jar`
【HBASERegion数量增多问题描述及解决方案】 在HBase分布式数据库中,Region是表数据的基本存储单元,它将表的数据按照ROWKEY的范围进行分割。随着数据的增长,一个Region会分裂成两个,以此来确保数据的均衡分布。...
该脑图是介绍获取元数据表hbase meta和用户表信息,请贡献给大家下载!
1、region 拆分机制 ...当region大小大于某个阈值(hbase.hregion.max.filesize=10G)之后就会触发切分,一个region等分为2个region。 但是在生产线上这种切分策略却有相当大的弊端:切分策略对于大表和小表没有
hbase-region-inspector, HBase区域统计信息的可视化仪表板 hbase-region-inspectorHBase区域统计信息的可视化仪表板。 用法下载与HBase集群版本匹配的可执行二进制插件,添加execute权限,并使用以下命令行参数启动...
HBase 2.x之RIT问题解决 HBase 2.x中的Region-In-Transition(RIT)机制是一种Region状态变迁机制,例如merge、split、assign、unassign等操作。在RIT过程中,可能会出现异常情况,从而导致Region的状态一直保持在...
- **HBase Meta Region**:HBase使用 ZooKeeper 进行元数据的协调和存储,包括表的存在性、Region信息等。创建表后,这些信息会被更新到Meta Region中,以便于后续的查找和操作。 - **.META. 表**:.META. 表是...
在IT行业中,尤其是在大数据处理领域,HBase是一个广泛使用的分布式、高性能、列式存储的NoSQL数据库。HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data...
本文将深入探讨如何进行HBase的安装、节点的添加与移除,以及如何解决常见的问题。 首先,Hadoop是HBase的基础,因此在安装HBase之前,必须先确保Hadoop环境已经正确配置并稳定运行。对于`hadoop-2.5.2-hbase-...
HBase中的多个HMaster通过Zookeeper的Master Election机制来确定主HMaster,主HMaster负责管理表和Region的生命周期,包括表的创建、删除、分区以及Region的迁移等。 HRegionServer是HBase的核心组件,它们直接处理...
HBase通过Region Split来解决这个问题,将大的Region分割成两个较小的部分,确保数据分布均匀。Split过程是透明的,对上层应用无感知。 2. **表的预分区**:为了优化数据写入,开发者可以在创建表时预先定义Region...
Region分裂是自动进行的,当一个Region的大小超过设定阈值时,Region Server会将该Region分裂成两个新的Region,然后更新Meta表记录新Region的信息。 总的来说,HBase的源码分析涉及到客户端与服务器的交互、RPC...
HMaster没有单点故障问题,因为HBase集群中可以有多个HMaster,它们之间通过ZooKeeper来协调彼此之间的活动,从而实现故障转移和高可用性。 HRegionServer是HBase集群运行在每个工作节点上的服务组件,负责维护...
HBase,全称为Hadoop Distributed File System上的基础结构(HBase on Hadoop Distributed File System),是一种分布式的、面向列的开源数据库,它构建在Apache Hadoop文件系统(HDFS)之上,提供高可靠性、高性能...
切割时,HBase会创建新的Region副本,然后更新Meta表信息,最后将客户端的请求路由到新的Region。整个过程需要保证数据的一致性和完整性,因此必须谨慎操作。 总结来说,HBase Region的数据切割是优化系统性能的...
### HBase学习利器:HBase实战 #### 一、HBase简介与背景 HBase是Apache Hadoop生态系统中的一个分布式、可扩展的列族数据库,它提供了类似Bigtable的能力,能够在大规模数据集上进行随机读写操作。HBase是基于...
在HBase的分布式架构中,`org.apache.hadoop.hbase.client.HConnectionManager`负责管理客户端与HBase服务器之间的连接,而`org.apache.hadoop.hbase.regionserver.HRegionServer`是处理Region服务的主要组件,它...
在HBase应用平台中,`balancer`功能是至关重要的,它确保了集群中的Region分布均衡,从而优化读写性能并提高系统的整体稳定性。 首先,我们需要理解HBase的Region概念。在HBase中,数据存储在Region中,每个Region...