HBase启动过于缓慢的原因及其优化策略

当HBASE导入了几十亿的数据记录时,某一天重启一下HBASE,发现启动过于缓慢,一直在提示PleaseHoldException:Master is initializing, 打开日志实时查看了下,其提示的信息一直是region transition 状态的各种变化。然而最惨的是,运行到最近,直接由于zookeeper超时,导致无法启动。

网上关于master is initalizing的问题解决都没有相应的问题。于是针对这个问题,只能仔细去摸一下Region的内核。

特别是从http://hbasefly.com/2016/09/08/hbase-rit/这篇博客中看到了整个region的状态迁移原理。

整个unassign操作是一个比较复杂的过程,涉及HMaster、RegionServer和Zookeeper三个组件:

1. HMaster负责维护Region在整个操作过程中的状态变化,起到一个枢纽的作用。它有两个重要的HashMap数据结构,分别为regionStates和regionsInTransition,前者用来存储整个集群中所有Region及其当时状态,而后者主要存储在变迁过程中的Region及其状态,后者是前者的一个子集,不包含OPEN状态的Regions;

2. RegionServer负责接收HMaster的指令执行具体unassign操作,实际上就是关闭region操作;

3. Zookeeper负责存储操作过程中的事件,它有一个路径为/hbase/region-in-transition的节点。一旦一个Region发生unssign操作,就会在这个节点下生成一个子节点,子节点的内容是一个“事件”经过序列化的字符串,并且Master会监听在这个子节点上,一旦发生任何事件,Master就会监听到并更新Region的状态。

通过上面的这段引摘,也就知道了自己的核心问题所在。由于自己在创建HBase表的时候,按照每个月建立一张独立的表,而在每个表里面则按小时创建了几百个预分区。从而一下子创建了太多的预分区。每次重启,都需要对预分区对应的region进行状态更新,而这一问题当超过了zookeeper的时间限制,则被强迫中止。这就是每次启动异常缓慢甚至中断的原因。

因此,在创建预分区的时候,所有的文章都没有说创建多少个预分区才合适,针对自己的应用,看来只有设置每个region大一些,同时再减少分区的个数,如减少到10个。这样看起来每次重启速度居然变得很快。可见region状态的迁移与其占用文件大小(在一定范围内)没有什么关系。

测试至此,终于要全部抛弃之前已有的数据,而在HBase无法正常启动的情况下,只能暴力进行HBase库的删除了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏白驹过隙

架构设计 - Server设计草稿

13820
来自专栏IT笔记

Tomcat优化之配置线程池

简介 线程池作为提高程序处理数据能力的一种方案,应用非常广泛。大量的服务器都或多或少的使用到了线程池技术,不管是用Java还是C++实现,线程池都有如下的特点:...

37280
来自专栏编程微刊

微信开发笔记

30640
来自专栏流柯技术学院

loadrunner录制回放常见问题及解决办法

1.录制错误     1)录制本机 WebTours 或录制本地网站无法打开     当 使 用 Vista 以 后 的 操 作 系 统 时 , 会 出 现 该...

33620
来自专栏deepcc

nodejs服务器anywhere简介

42340
来自专栏java相关

Redis学习笔记01---配置文件

13940
来自专栏Ryan Miao

resin4的初次配置与使用

之前用的resin3,结果发布新项目老师文件冲突,我也找不到是哪里有问题,于是尝试使用resin4. 首先从官网下载最新resin4。 然后放到opt下,tar...

390110
来自专栏ionic3+

【技巧】ionic3善用数据变更检查

利用Cordova插件加载本地图片显示在html中,有时等很久才显示,以为是插件的问题,但是调试的时候,发现图像数据很快就返回了,那猜想是显示的问题,同时发现,...

10250
来自专栏Java成神之路

分布式_事务_01_2PC框架raincat快速体验

配置txManaager, 修改application.properties中你自己的redis配置 启动TxManagerApplication

23810
来自专栏架构师之路

缓存与数据库一致性保证

本文主要讨论这么几个问题: (1)啥时候数据库和缓存中的数据会不一致 (2)不一致优化思路 (3)如何保证数据库与缓存的一致性 一、需求缘起 上一篇《缓存架构设...

698100

扫码关注云+社区

领取腾讯云代金券