阅读本文可以带着下面问题:
1.HBase遇到问题,可以从几方面解决问题?
2.HBase个别请求为什么很慢?你认为是什么原因?
3.客户端读写请求为什么大量出错?该从哪方面来分析?
4.大量服务端exception,一般原因是什么?
5.系统越来越慢的原因是什么?
6.Hbase数据写进去,为什么会没有了,可能的原因是什么?
7. regionserver发生abort,遇到最多是什么情况?
8.从哪些方面可以判断HBase集群是否健康?
9.为了加强HBase的安全性,你会采取哪些措施?

在Tcon分布式系统测试实践的分享中,笔者提到了测试人员参与线上问题分析的必要性:
1、测试工作中的问题定位提供了大量经验,可以直接应用于线上。
2、快速的解决问题可以避免大故障的发生。
3、从线上的问题可以帮助我们准确抓住测试的重点和不足。

因此在日常的线上维护工作中,积累和很多HBase的问题分析经验,这里于大家分享一下,如有错误和不足请指出。

问题分析的主要手段
1、监控系统:首先用于判断系统各项指标是否正常,明确系统目前状况
2、服务端日志:查看例如region移动轨迹,发生了什么动作,服务端接受处理了哪些客户端请求。
3、gc日志:gc情况是否正常
4、操作系统日志和命令:操作系统层面、硬件是否故障,当前状况如何
5、btrace:实时跟踪目前服务端的请求和处理情况
6、运维工具:通过内置于系统中的功能,查看服务器实时处理状况
其实以上手段,大部分系统都具备,不过各有各的用法,下面我会通过常见的问题来梳理这6大手段。

常见问题1:个别请求为什么很慢?
个别请求慢是用户遇到最多的问题,首先需要明确是客户端还是服务端原因,进而分析服务端状况以及捕获这些请求来明确定位。
1、通过客户端日志来初步分析下慢请求的规律,尝试在客户端确定请求的rowkey和操作类型。
2、确定是不是一段时间内集中出现慢请求,如果是那么可以参考常见问题2来解决。
3、查看服务端监控,观察响应时间是否平稳,maxResponseTime是否出现峰值。如果存在,那么可以初步确定是服务端问题。
4、客户端分析无效,可以通过运维工具在服务端捕获慢请求的rowkey和操作类型。
5、确定rowkey对应的region,初步查看是否存在数据表参数配置不合理(例如version设置过多、blockcache、bloomfilter类型不正确)、storefile过多、命中率过低等问题。
6、尝试重试这些请求或者直接分析hfile来查看返回结果是否过大,请求是否耗费资源过多。
7、查看服务端关于hdfs的监控和日志,以及datanode日志,来分析是否存在hdfs块读取慢或者磁盘故障。

常见问题2:客户端读写请求为什么大量出错?
读写请求大量出错的现象主要有两类:1、大量出现服务端exception 2、大量超时。其中第一种有异常信息较好判断问题所在。
1、大量服务端exception一般是region不在线导致的,可能是region在split但是时间很长超过预期,或是meta数据错误导致客户端获取region location错误。以上现象均可通过日志来定位。
2、遇到大量超时,首先应该排除服务端是否出现了fullgc或者ygc时间过长。前者可能由于内存碎片、cms gc速度来不及导致,后者一般是由于系统使用了swap内存。
3、通过系统命令和日志来查看是否有机器load过高,磁盘压力过大,磁盘故障。
4、查看监控是否出现callqueue积压,请求无法得到及时处理,进一步通过call查看工具或者jstack可以查看正在处理的call和进程堆栈信息。
5、通过datanode日志和hbase访问dfs的时间,来判断问题是否在hdfs层。
6、查看监控判断是否出现blocking update,memstore是否已接近系统设置的上限。

常见问题3:系统为什么越来越慢了?
系统原来挺快的,为什么越来越慢?多数是不合理的服务端配置导致的,可以通过以下几个方面来分析。
1、磁盘读写和系统load是不是比以前高了,初步判断导致系统变慢的原因。
2、如果磁盘读写加剧,重点查看flush是否过小,compact是否过频,尤其是major compact是否有必要,从测试结果来看compact产生的磁盘io对系统性能影响很大。
3、单个region的storefile个数是否有成倍提高
4、命中率是否有下降趋势
5、regionserver是否存在region分配不均衡导致的读写集中,或者读写handler的竞争
6、datablock的本地化率是否出现下降
7、是否存在datanode运行不正常,可以通过监控查看是否有个别机器读取block时间明显偏高

常见问题4:数据为什么没了,明明写进去过?
数据丢失也是HBase的常见bug,分为临时性和永久性两类。临时性的丢失往往是由于hbase本身的正确性问题导致瞬间读取数据错误。永久性丢失一般是日志恢复bug或者region的二次分配。
1、首先可以通过hbck或者master日志排查丢失的数据所在region是否发生过二次分配
2、集群中的regionserver是否出现过abort,日志是否正确恢复。
3、扫描storefile确定目前数据情况
4、扫描logs或者oldlogs中的文件来确定是否写入过这些数据,以及写入数据的时间,配合rs的日志来确定当时server的行为
5、根据写入数据的时间,确定regionserver是否正确完成了flush并且将数据写入磁盘

常见问题5:为什么有服务器进程挂了?
regionserver发生abort的场景很多,除了系统bug引起的以外,线上遇到最多的就是fullgc引起的zk节点超时和文件系统异常。
1、查看regionserver日志查询FATAL异常,确定异常类型
2、查看gc日志确定是否发生fullgc或者ygc时间过长
3、如果没有征兆,日志突然中断,首先需要考虑是否发生了OOM(0.94版本会直接kill -9)。
4、可以通过系统内存监控判断是否出现被占满的情况
5、查看datanode是否出现异常日志,regionserver可能由于roll log或者flush时的文件系统异常导致abort
6、排除人为调用stop的情况

HBase健康体检
一个集群似乎否健康,大体可以从以下几个方面来判断
1、单region的storefile数量是否合理
2、memstore是否得到合理的利用,此项指标与hlog的数量和大小相关
3、compact和flush的流量比值是否合理,如果每天仅flush 1G却要compact几十上百G就是明显的浪费
4、split似乎否过频,能否采取pre-sharding的方式来预分配region
5、集群的region是否过多,zk在默认参数下无法支撑12w以上的region个数,并且region过多也会影响regionserver failover的时间
6、读写相应时间是否合理,datablock的读取延时是否符合预期
7、flush队列、callqueue长度、compact队列是否符合预期。前两者的积压都会造成系统不稳定。
8、failedRequest和maxResponseTime
9、gc状况,过长的ygc和过频的cms都需要警惕

运维工具
HBase官方版本的可运维性的确很差,为了能最大限度的保证线上系统安全,快速定位故障原因,阿里做了很多建设性的工作。
1、建立了完整的监控体系,根据日常测试和线上运行经验,加入了很多监控点。
2、监控的粒度达到region级别
3、call dump和线上慢请求追踪功能
4、btrace脚本体系,出现问题直接运行查看程序内部信息
5、日志收集和报警
6、在线表维护工具和storefile、logs分析工具

hbase 问题整理的更多相关文章

  1. 配置Hadoop,hive,spark,hbase ————待整理

    五一一天在家搭建好了集群,要上班了来不及整理,待下周周末有时间好好整理整理一个完整的搭建hadoop生态圈的集群的系列 若出现license information(license not accep ...

  2. Hbase集群搭建及所有配置调优参数整理及API代码运行

    最近为了方便开发,在自己的虚拟机上搭建了三节点的Hadoop集群与Hbase集群,hadoop集群的搭建与zookeeper集群这里就不再详细说明,原来的笔记中记录过.这里将hbase配置参数进行相应 ...

  3. OpenTSDB/HBase的调优过程整理

    背景 过年前,寂寞哥给我三台机器,说搞个新的openTSDB集群.机器硬件是8核16G内存.3个146G磁盘做数据盘. 我说这太抠了,寂寞哥说之前的TSDB集群运行了两年,4台同样配置的机器,目前hd ...

  4. 大数据相关技术原理资料整理(hdfs, spark, hbase, kafka, zookeeper, redis, hive, flink, k8s, OpenTSDB, InfluxDB, yarn)

    hdfs: hdfs官方文档 深入理解HDFS的架构和原理 https://blog.csdn.net/kezhong_wxl/article/details/76573901 HDFS原理解析(总体 ...

  5. hive和hbase比较(整理)

    hive1.可以理解为一种SQL执行引擎,对SQL的支持最终转换为map/reduce任务2.不支持更新.删除操作,但可以插入3.任务不是实时执行,用时一般为数分钟到数小时4.本身可以不存储数据,只存 ...

  6. Hadoop相关知识整理系列之一:HBase基本架构及原理

    1. HBase框架简单介绍 HBase是一个分布式的.面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.HBas ...

  7. 10大HBase常见运维工具整理

    摘要:HBase自带许多运维工具,为用户提供管理.分析.修复和调试功能.本文将列举一些常用HBase工具,开发人员和运维人员可以参考本文内容,利用这些工具对HBase进行日常管理和运维. HBase组 ...

  8. hadoop/storm以及hive/hbase/pig区别整理

    STORM与HADOOP的比较 对于一堆时刻在增长的数据,如果要统计,可以采取什么方法呢? 等数据增长到一定程度的时候,跑一个统计程序进行统计.适用于实时性要求不高的场景.如将数据导到HDFS,再运行 ...

  9. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

随机推荐

  1. java的数组

    作用:存储相同类型的一组数组,相当于一个容器,存放数据的.对同种数据类型集中存储.管理.便于遍历 数组类型:就是数组中存储的数据的类型 特点:数组中的所有元素必须属于相同的数据类型,数组中所有元素在内 ...

  2. python+appium模拟手机物理按键操作

    一句代码:driver.keyevent()        括号里填入的是手机物理按键的数字代号 driver.press_keycode()        括号里填入的是键盘按键的数字代号 手机物理 ...

  3. 机器学习中模型泛化能力和过拟合现象(overfitting)的矛盾、以及其主要缓解方法正则化技术原理初探

    1. 偏差与方差 - 机器学习算法泛化性能分析 在一个项目中,我们通过设计和训练得到了一个model,该model的泛化可能很好,也可能不尽如人意,其背后的决定因素是什么呢?或者说我们可以从哪些方面去 ...

  4. 【asp.net】asp.net实现上传Excel文件并读取数据

    #前台代码:使用服务端控件实现上传 <form id="form1" runat="server"> <div> <asp:Fil ...

  5. Tomcat系列(7)——Tomcat类加载机制

    1. 核心部分 1. 类加载器: 通过一个类的全限定名来获取描述此类的二进制字节流. 对于任意一个类,都需要由加载他的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一 ...

  6. OOP的魔术方法

    1.构造函数:__construct(): 构造函数是类中的一个特殊函数,当我们使用new关键字实例化对象时,相当于调用了类的构造函数. function __construct($name){ $t ...

  7. 激光推送(ios,安卓)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  8. webpack配置less

    webpack4.0把webpack.config.js隐藏起来了,需要先暴露出来,在webpack修改配置

  9. EOCS 最低资源保障机制

    本期小E将为大家带来EOCS 最低资源保障机制. 为满足普通用户日常的转账等基本需求,无需再为较少的初始资源抵押担心无法使用链上功能.EOCS可以通过链的参数来调整分配给每个用户免费的资源额度,相当于 ...

  10. MDX Query - mdx的基本语法和概念

    文档: https://wenku.baidu.com/view/ef14b0e1900ef12d2af90242a8956bec0975a5e7.html?rec_flag=default http ...