前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WAL文件过多导致hbase master无法启动

WAL文件过多导致hbase master无法启动

原创
作者头像
mikealzhou
修改2018-10-10 22:54:54
2.6K0
修改2018-10-10 22:54:54
举报
文章被收录于专栏:大数据平台TBDS大数据平台TBDS

导语:

近期腾讯云某家大客户的hbase master一直无法启动,经过仔细诊断之后发现是由于hbase的WAL文件非常多(达到15TB),导致hbase在zk的节点(存储WAL文件信息的节点)超过4096*1024 默认大小,无法正常提供服务。因此,hbase master无法正常启动。通过增加zk节点的大小参数,并且优化WAL文件,最终解决该问题。

一、故障现象

hbase master启动不了,日志报错无法连接上zk 的 /hbase/splitWAL节点:

图1: hbase master 报错日志
图1: hbase master 报错日志

既然是报错连接不上zk的节点 /hbase-unsecure/splitWAL(这个节点存储的是hbase的WAL文件信息),那么我们登录上zk去测试该节点:

图2: zk的报错信息
图2: zk的报错信息

从zk的报错信息可以看到, /hbase-unsecure/splitWAL 节点的大小“ Packet len10980003 is out of range”,也就是节点大小超出范围。

二、故障分析与解决

从上述报错来看,导致hbase master无法启动的原因是hbase在zk的节点(存储WAL文件信息的节点)超过

一定值,导致hbase master无法连接到zk节点,进而无法启动。按理说,hbase存储WAL不会太多,zk节点也不会超过4M大小。我们先查看hbase 的 WAL文件大小:

图3: hbase 的 WAL文件大小
图3: hbase 的 WAL文件大小

hbase 的 WAL文件大小超过15TB,看来确实是异常

我们进一步诊断查看zk的源代码:

代码语言:java
复制
protected final ByteBuffer lenBuffer = ByteBuffer.allocateDirect(4);
protected ByteBuffer incomingBuffer = lenBuffer;

protected void readLength() throws IOException {
    int len = incomingBuffer.getInt();
    if (len < 0 || len >= ClientCnxn.packetLen) {
        throw new IOException("Packet len" + len + " is out of range!");
    }
    incomingBuffer = ByteBuffer.allocate(len);
}

public static final int packetLen = Integer.getInteger("jute.maxbuffer", 4096 * 1024);

发现zk的单节点大小不能超过 4096*1024,10980003 已经超过该阈值。

经过上诉分析,基本上可以判断是由于hbase 的WAL文件太多,导致zk节点 /hbase-unsecure/splitWAL 接近10M,超过4M的阈值限制,导致hbase master无法连接到 zk节点 /hbase-unsecure/splitWAL,进而无法启动hbase master。

三、故障解决办法

最简单的解决办法,就是修改hbase连接zk的节点参数大小,使得其超过10M,这样可以将hbase master启动;然后再处理WAL过大问题,一般而言,15TB的WAL文件意味着hbase 的WAL机制已经异常,需要手工处理。

通过修改hbase-env.sh 文件,将参数 -Djute.maxbuffer = 20971520 (20M) 设置到 HBASE_OPTS。具体设置方法根据大数据平台不同而有差异。比如,如果是ambari搭建的大数据集群,那么直接在ambari界面修改hbase的配置文件,在hbase-env.sh文件最后添加以下一行参数:

代码语言:javascript
复制
export HBASE_OPTS = "$HBASE_OPTS -Djute.maxbuffer = 20971520"

如果是自己手工搭建的,直接在修改hbase-env.sh 文件,将上述一行参数添加到hbase-env.sh 文件末尾。

最后重启hbase,即可生效。

四、后续进一步优化

进一步的还需要找到hbase 为什么有如此多WAL文件的原因,找出根源才能彻底解决这个问题。首先需要手工处理这15TB的WAL文件,然后再找出hbase 产生如此多WAL文件的根本原因,进行彻底解决。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、故障现象
  • 二、故障分析与解决
  • 三、故障解决办法
  • 四、后续进一步优化
相关产品与服务
TDSQL MySQL 版
TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档