从0开始的hbase

2016马上要结束了,回顾一下这一年对hbase的学习历程。

1,年初hbase的状态

使用场景:主要是用来存储业务线的mysql表,增量同步到hbase,然后每天晚上全量导入hdfs做离线计算。 hbase集群状态:除了调大了regionserver的heap size。其他基本没有动。经常发生的问题是晚上高峰导表的时候,不时会有regionserver宕机。 故障恢复:非常慢,碰到问题像无头的苍蝇,各种重启,然后表各种RIT。年初的时候经历过一次故障,两个人折腾了一天,而且还导致了数据的丢失。 对hbase掌握情况:组里之前没人有对hbase有较为深入的了解,面对这些情况,所以决定拿出一个部分精力对hbase做一些学习,以便更好地为生产环境服务。

2,年末hbase的状态

使用场景:除了原有的业务表同步(增量写入,全量读取)以外,另外新增了各种数据导出业务,另外还有用户访问行为分析业务(增量写入,随机读取)。其实,hbase更适合这种随机读写业务,因为总的来说hbase全表扫描是很慢的。 hbase集群状态:regionserver宕机的情况大大减少,半年里发生的次数差不多三四次,都是客户端对hbase突然的大量请求导致的。 故障恢复:因为表处于RIT状态卡主导致无法读写的故障,恢复时间在10min以内,而且数据不会丢失。 对hbase掌握情况: 对split,compact,flush,客户端请求等流程有大致的了解,碰到问题,能够根据源码去找问题,解决问题。另外,对故障恢复有了一定的经验。

3,干过的事

梳理下来,主要的hbase做了以下事情:

1,使用LruBlockCache+BucketCache替换掉hbase默认使用的LruBlockCache。

LruBlockCache所有的内存都分配在Heap上,一般来说对于Region Server配置的内存不超过20G的情况下,采用LruBlockCache还能应付的过去。但是超过以后,GC的压力会很大,因为heap内存大了以后,Full GC时Stop the world的时间会很长,而一旦超过regionserver和zk的心跳时间,region server就死掉了。 采用LruBlockCache+BucketCache以后,相关的data block的索引,bloom过滤器等会存放在LruBlockCache(分配在堆上),而data block会存放在Bucket Cache上(这个不经过heap,直接分配在堆外内存上),由hbase自己去管理堆外内存,这样就避免了GC的压力,region server的稳定性增强了很多。

2,每天对需要导出的表做major compact。

我们hbase的使用场景是读多写少,hbase请求的高峰是0点全量导表的时候,而写入主要是增量同步数据。hbase默认是一周左右做一次major compaction。 major compaction会使得同一个region下的storeFile会合并成一个大的storeFile,所以在做major compaction的时候会耗费磁盘和cpu,并且时间可能会很长,而带来的好处是带来读性能的极大提升。为此,我们每天手工对需要的表做major compaction,而带来的效果也很明显,晚上导表时间减少了50%。

3,参数调整。

针对集群中每台regin server的region数已将近500,而正常情况每台regionserver应该在100-200左右。为此,将单个region的size(hbase.hregion.max.filesize)从默认的1G增到2G。 另外,针对集群的读写请求比例,对写请求相关的memstore size和读请求相关的block cache size参数做了对应的调整。

4,使用YCSB测试hbase集群

使用YCSB对hbase集群的对写性能做了摸底,并且通过测试验证参数调整效果。另外,在测试中发现,读写请求数据量的大小对读写性能有着非常重要的影响。

5,hbase运维

碰到region server当机了,表读写卡住了怎么办? 首先,不要慌,哈哈。一两台region server宕机,对集群没影响。备份好日志,先启动死掉的region server,然后慢慢分析日志就好了。一次region server宕机了,发现宕机之前有大量的flush,所以怀疑是写请求量增加导致的。但是当时,相关hbase读写请求的指标没有采集,所以没法验证,于是只好直接问组里小伙伴,然后发现真是这样。此次事件后,开始收集hbase各种指标。可以说,故障激励着我们进步和成长。 其次,碰到table在RIT状态时,首先用hbase hbck去查看是否有状态不一致,一旦发现有以后,可以尝试通过hbase hbck repair来修复。 最后,很多时候,table处于RIT状态,都是集群中一两台region server有异常导致的,这个时候可以让这台有问题的region server先下线。待恢复后,再上线。

总结

从当初到hbase一无所知,到现在基本能够保证线上运行,我们经历了好多,可是说是故障伴随我们成长。目前最大的欣慰就是,碰到问题大部分情况下能够通过查看源码来分析和解决问题。hbase水很深,未来的路还很长。正所谓:路漫漫其修远兮,吾将上下而求索~

时间: 2024-08-03 09:13:50

从0开始的hbase的相关文章

Hbase 0.96 比 hbase 0.94的改变

转载:http://blog.csdn.net/hxpjava1/article/details/20043703 环境: hadoop:hadoop-2.2.0 hbase:hbase-0.96.0 1.org.apache.hadoop.hbase.client.Put     <1>取消了无参的构造方法     <2>Put类不再继承Writable类              0.94.6时public class Put extends Mutation implemen

CDH5.0.2安装HBase Phoenix4.2

由于目前公司大量的数据存储在HBase中,各个业务线需要对HBase进行即时查询,但是又不方便实现自己的基于HBase Client的API的数据访问实现,他们希望能够像Hive对HDFS中的数据进行ETL一样,可以对HBase中的数据进行SQL操作 我们最初考虑的方式是Hive On HBase,这样主要思想是将数据存储在HBase中,设置一张Hive表,关联HBae中的数据,具体原理如 http://www.blogjava.net/ivanwan/archive/2011/01/10/34

spark1.0.2读取hbase(CDH0.96.1)上的数据

基本环境: 我是在win7环境下,spark1.0.2,HBase0.9.6.1 使用工具:IDEA14.1, scala 2.11.6, sbt.我现在是测试环境使用的是单节点 1.使用IDEA创建一个sbt的工程后,在build.sbt文件加入配置文件 libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.0.2" % "provided" l

phoenix 3.1 + hbase 0.94.21 的安装和使用

Apache Phoenix 是 HBase 的 SQL 驱动.Phoenix 使得 HBase 支持通过 JDBC 的方式进行访问,并将你的 SQL 查询转成 HBase 的扫描和相应的动作. 兼容性: Phoenix 2.x - HBase 0.94.x Phoenix 3.x - HBase 0.94.x Phoenix 4.x - HBase 0.98.1+ 1:hbase 0.94.21 的安装 参考http://blog.csdn.net/wind520/article/detail

通过tarball形式安装HBASE Cluster(CDH5.0.2)系列随笔

本系列文章只是记录了笔者本人在学习实验安装和使用基于CDH5.0.2的HBASE集群过程中的一些经验教训和心得,绝不是详细的安装过程,因本人不过一初学者,很多方面不甚了了,如果能让不幸读到的人有所得则不胜欣喜,否则大家一笑置之即可. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——集群安装总览 通过tarball形式安装HBASE Cluster(CDH5.0.2)——如何配置分布式集群中的zookeeper 通过tarball形式安装HBASE Cluster(CD

Hbase 1.0.1单机版安装

1.首先从官网上下载http://mirror.bit.edu.cn/apache/hbase/hbase-1.0.1/hbase-1.0.1-bin.tar.gz   安装包 2.解压缩到安装目录,tar -xvf hbase-1.0.1-bin.tar.gz 3.修改conf/hbase-site.xml <configuration> <name>hbase.rootdir</name> <property>   <!--这里的8020端口和ha

HBase 官方文档0.90.4

HBase 官方文档0.90.4 Copyright ? 2010 Apache Software Foundation, 盛大游戏-数据仓库团队-颜开(译) Revision History Revision 0.90.4 配置,数据模型使用入门 Abstract 这是 Apache HBase的官方文档, Hbase是一个分布式,版本化(versioned),构建在 Apache Hadoop和 Apache ZooKeeper上的列数据库. 我(译者)熟悉Hbase的源代码,从事Hbase

阿里云轻量服务器Ubuntu18.04上安装Hbase2.2.0与Hbase Shell基本操作

这是我自己装BigData相关软件的一系列教程的第二篇,第一篇是Hadoop的安装https://www.cnblogs.com/annie666/p/11567690.html 装软件是学大数据最最基础的一步,虽然相对简单,还是很容易出错啊.希望这个详细的教程可以帮助其他想学大数据的同学少走弯路. 参考资料 厦大林子雨教程:http://dblab.xmu.edu.cn/blog/2139-2/ 一.准备工作 装软件最怕的事情就是安错版本.所以安装Hbase前,看一下官网的basic prep

Hbase基本语句用法

使用hbase shell命令进入hbase: [[email protected]~]# hbase shell SLF4J: Class path contains multiple SLF4Jbindings. SLF4J: Found binding in[jar:file:/usr/hdp/2.4.3.0-227/hadoop/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Fo