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水很深,未来的路还很长。正所谓:路漫漫其修远兮,吾将上下而求索~

从0开始的hbase的更多相关文章

  1. Hbase 0.96 比 hbase 0.94的改变

    转载:http://blog.csdn.net/hxpjava1/article/details/20043703 环境: hadoop:hadoop-2.2.0 hbase:hbase-0.96.0 ...

  2. hadoop 1.1.2和 hive 0.10 和hbase 0.94.9整合

    今天弄了一下hive0.10和hbase0.94.9整合,需要设置的并不多,但是也遇到了一些问题. 1.复制jar包 拷贝hbase-0.94.9.jar,zookeeper-3.4.5.jar,pr ...

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

    基本环境: 我是在win7环境下,spark1.0.2,HBase0.9.6.1 使用工具:IDEA14.1, scala 2.11.6, sbt.我现在是测试环境使用的是单节点 1.使用IDEA创建 ...

  4. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——HBASE 真分布式集群配置

    一.应该先配置好zookeeper并成功启动,否则hbase无法启动 二.配置HBASE集群 1,配置hbase-env.sh,下面是最少配置项目 [hadoop@zk1 conf]$ vim hba ...

  5. hbase 0.96 单机伪分布式配置文件及遇到的问题 find命令

    http://www.apache.org/dyn/closer.cgi/hbase/ 国外的站点下载速度慢,可以考虑国内的镜像网站~ 前面已经部署好了hadoop2.2.0单机伪分布式.必须先安装h ...

  6. 伪分布式hbase从0.94.11版本升级stable的1.4.9版本

    Hbase从0.94.11升级到stable的1.4.9版本: 升级思路: hadoop1.1.2    hbase 0.94.11                             ↓ had ...

  7. 安装配置和使用HBASE Cluster(基于发行版CDH5.0.2)——系列随笔

    本系列文章只是记录了笔者本人在学习实验安装和使用基于CDH5.0.2的HBASE集群过程中的一些经验教训和心得,绝不是详细的安装过程,因本人不过一初学者,很多方面不甚了了,如果能让不幸读到的人有所得则 ...

  8. HBase集群环境搭建v1.0

    本文档环境基于ubuntu14.04版本,如果最终不使用SuperMap iServer 9D ,可以不配置geomesa-hbase_2.11-2.0.1-bin.tar.gz (转发请注明出处:h ...

  9. Spark 下操作 HBase(1.0.0 新 API)

    hbase1.0.0版本提供了一些让人激动的功能,并且,在不牺牲稳定性的前提下,引入了新的API.虽然 1.0.0 兼容旧版本的 API,不过还是应该尽早地来熟悉下新版API.并且了解下如何与当下正红 ...

随机推荐

  1. js性能优化之函数节流(分流函数)

    函数节流的原理 比如我们在window.onresize事件中要打印当前浏览器窗口的大小,在我们通过拖拽来改变窗口大小时候,打印窗口大小这个工作1s就运行了10次.而实际上我们只需要2次或者3次. 比 ...

  2. 解决echart在IE中使用时,在div中加入postion后图表不显示问题

    <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="height:400px;width:1 ...

  3. Visual Studio Code 常用插件

    这里记录在Visual Studio Code中,我经常用到的插件. C#这个就不必说了,想用VIsual Studio Code调试和编辑C#代码,必须要装这个插件.东西还好,就是每次安装和更新插件 ...

  4. Unable to find a team with the given Team ID或者Failed to code sign的问题解决

    Unable to find a team with the given Team ID或者Failed to code sign的问题解决 1:问题描述(注:这种情况一般是下载并打开别人项目时) F ...

  5. github的提交源码到服务器

    github是现代的代码库,各种牛人,各种开源,也是现在大公司招聘的一个考察点, 这里介绍一下怎样把本地源码提交到github上. 首先我们需要在github上创建一个respository. 2,输 ...

  6. win系统下启动linux上的kafka集群及使用

    一.首先在win系统下C:\Windows\System32\drivers\etc文件夹中hosts文件加入例如以下内容: 10.61.6.167 slaves1 10.61.6.168 slave ...

  7. [IT学习]华为全连接大会2017

    1.5分钟.3分钟.1分钟倒计时. 2.20万盏纽约街头的油灯接入电网,类比未来的公司IT系统会接入云? 3.1943年,全球只要5台计算机.不会的,但是会有5多云? 4.与航空业的联盟类比,云计算的 ...

  8. 导入别人的Android项目,提示 /Libs/gen already exists but is not a source folder. Convert to a source folder or rename it

    解决方法: 遇到这个问题的解决方法: 1. 右键点击工程,选择 "Properties" 2. 选择左边的 "Java Build Path" 3. 打开 &q ...

  9. Linux中的mysql.redis

    1,Linux上的mysql MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源 ...

  10. Spring Cloud 学习总结001-服务治理-Eureka

    学习参考:http://blog.didispace.com/Spring-Cloud%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/ spring cloud由[服务注册中 ...