从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水很深,未来的路还很长。正所谓:路漫漫其修远兮,吾将上下而求索~
从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 ...
- 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 ...
- spark1.0.2读取hbase(CDH0.96.1)上的数据
基本环境: 我是在win7环境下,spark1.0.2,HBase0.9.6.1 使用工具:IDEA14.1, scala 2.11.6, sbt.我现在是测试环境使用的是单节点 1.使用IDEA创建 ...
- 通过tarball形式安装HBASE Cluster(CDH5.0.2)——HBASE 真分布式集群配置
一.应该先配置好zookeeper并成功启动,否则hbase无法启动 二.配置HBASE集群 1,配置hbase-env.sh,下面是最少配置项目 [hadoop@zk1 conf]$ vim hba ...
- hbase 0.96 单机伪分布式配置文件及遇到的问题 find命令
http://www.apache.org/dyn/closer.cgi/hbase/ 国外的站点下载速度慢,可以考虑国内的镜像网站~ 前面已经部署好了hadoop2.2.0单机伪分布式.必须先安装h ...
- 伪分布式hbase从0.94.11版本升级stable的1.4.9版本
Hbase从0.94.11升级到stable的1.4.9版本: 升级思路: hadoop1.1.2 hbase 0.94.11 ↓ had ...
- 安装配置和使用HBASE Cluster(基于发行版CDH5.0.2)——系列随笔
本系列文章只是记录了笔者本人在学习实验安装和使用基于CDH5.0.2的HBASE集群过程中的一些经验教训和心得,绝不是详细的安装过程,因本人不过一初学者,很多方面不甚了了,如果能让不幸读到的人有所得则 ...
- HBase集群环境搭建v1.0
本文档环境基于ubuntu14.04版本,如果最终不使用SuperMap iServer 9D ,可以不配置geomesa-hbase_2.11-2.0.1-bin.tar.gz (转发请注明出处:h ...
- Spark 下操作 HBase(1.0.0 新 API)
hbase1.0.0版本提供了一些让人激动的功能,并且,在不牺牲稳定性的前提下,引入了新的API.虽然 1.0.0 兼容旧版本的 API,不过还是应该尽早地来熟悉下新版API.并且了解下如何与当下正红 ...
随机推荐
- serverSpeed是一个android手机端到服务器间udp/tcp对比测速软件
https://github.com/eltld/serverSpeed https://github.com/c-wind/serverSpeed https://github.com/PeterK ...
- JQuery实现表格行的上移、下移、删除、增加
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%&g ...
- Mac Chrome-点击书签页在新的标签打开之方法
PS:一直使用的是Firefox,但是现在Firefox有些不能满足我现在的需求,所以下载了chrome.可是当使用chrome时发现有一个很实用的功能它不能设置,这个让我很抓狂. 当点击标签时不能新 ...
- 发挥bat的作用
from 转自:http://blog.csdn.net/hitlion2008/article/details/7467252 1.什么是Windows BATCH BATCH也就是批处理文件,有时 ...
- 鉴权应用服务器 app客户端 web服务端 安全令牌(SecurityToken)、临时访问密钥(AccessKeyId, AccessKeySecret)
设置EndPoint和凭证 移动终端是一个不受信任的环境,把AccessKeyId和AccessKeySecret直接保存在终端用来加签请求,存在极高的风险.建议只在测试时使用明文设置模式,业务应用推 ...
- 前端富文本 js 版本
https://s3.pstatp.com/pgc/v2/resource/tt_ueditor_v3_temple/tt-editor.all.js?20180425
- jdbc 操作步骤
package org.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExcept ...
- 什么叫强类型的DATASET ?对DATASET的操作处理?强类型DataSet的使用简明教程
强类型DataSet,是指需要预先定义对应表的各个字段的属性和取值方式的数据集.对于所有这些属性都需要从DataSet, DataTable, DataRow继承,生成相应的用户自定义类.强类型的一个 ...
- es的forcemerge——按照天分割
归并线程配置 segment 归并的过程,需要先读取 segment,归并计算,再写一遍 segment,最后还要保证刷到磁盘.可以说,这是一个非常消耗磁盘 IO 和 CPU 的任务.所以,ES 提供 ...
- 我的vim 配置——nerdtree、ack vim、vim sneak
set nu colorscheme darkblue syntax on " set term=xterm " 设置终端类型 set nonumber " 是否显示行号 ...