有一段实践没有写东西了,最近组里面来了两个新的小伙伴,并且一起针对目前的hbase集群做了一些运维和优化实践,比较零散,记录下来供以后以及和大家参考。

1,hbase regionserver宕机导致集群状态不一致问题处理和原因调研

问题:region server因oom被kill后,通过hack检查,发现集群中某些表出现不一致,不一致信息如下:
Region XXX not in Meta, but deployed on XXXX。
诊断:正常情况下regionserver宕机系统不应该出现状态不一致,查看不一致region对应的hdfs目录,发现对应region的目录大小为空,也就说对应region不在meta表中,但是在某台机器上deploy了,而且没有数据。怀疑是master中内存中保存的region状态和其他表不一致,导致在regionserver宕机时,region转移到其他机器的时候,使用了脏的master内存信息。重启master以后,删除对应的hdfs目录。问题得以修复。

2,jruby脚本运维hbase

问题:业务线将日志明细塞入hbase,以便查询最近系统状态的详情,在hbase中该表设置一个TTL,但是写入量巨大。hbase在做major compaction的时候会将过期的数据删除,但是自动split的region信息去没有自动删除。
 诊断:通过写jruby脚本,类似在hbase shell中调用merge_region函数来定时合并region。脚本部分代码如下:
require 'java'
require 'date' import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.HBaseAdmin config = HBaseConfiguration.create
admin = HBaseAdmin.new config regionsInfo = admin.getTableRegions(‘xxxx'.to_java_bytes)
preRegionInfo = nil sixDaysAgo = (Date.today - 6).strftime("%Y%m%d").to_s
#puts sixDaysAgo maxMergeNum = 200
mergedNum = 0
grap = 3 for regionInfo in regionsInfo:
#puts regionInfo
curStartKey = java.lang.String.new(regionInfo.getStartKey())
curEndKey = java.lang.String.new(regionInfo.getEndKey())
# puts curEndKey if not curEndKey.equals("") and not curStartKey.equals("")
# not the last regionInfo
regionEndTime = curEndKey.split("_")[2].to_java
regionStartTime = curStartKey.split("_")[2].to_java
if regionStartTime.compareTo(sixDaysAgo) < 0 and regionEndTime.compareTo(sixDaysAgo) < 0 and grap > 2:
preRegionEncodeName = preRegionInfo.getEncodedName()
curRegionEncodeName = regionInfo.getEncodedName()
puts preRegionEncodeName
puts curRegionEncodeName, java.lang.String.new(regionInfo.getStartKey()), java.lang.String.new(regionInfo.getEndKey())
puts "******************"
mergedNum = mergedNum + 1
admin.mergeRegions(preRegionEncodeName.to_java_bytes, curRegionEncodeName.to_java_bytes, false)
grap = 0
sleep 10
end
end
grap = grap + 1
preRegionInfo = regionInfo
#if java.lang.String.new(regionInfo.getStartKey()).equals("")
# preRegionInfo = regionInfo
#end
#break
if mergedNum >= maxMergeNum
break
end
end

3,是用jsp动态获取集群信息以及操控

可以利用jps页面直接获取master或者regionserver实时信息,具体操作如下:
a, copy zk.jsp文件到hbase-webapps/master, 保存文件为xx.jsp
b, 重启master
c, 访问master:16010/xx.jsp, 可以获取zookeeper的相关信息。

4,DIFF编码和压缩

问题:hbase中表占用的存储空间越来越来,希望减少hbase表占用空间。
方案:表级别enable DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => ‘LZO’ 属性,通过测试发现添加这个两个选项以后,空间能够减少9倍左右。

小结

本文主要记录下最近hbase的一些实践,另外基于opentsdb的hbase监控系列,打算有空再开篇描述下。

hbase最近的一些实践的更多相关文章

  1. 阿里HBase的数据管道设施实践与演进

    摘要:第九届中国数据库技术大会,阿里巴巴技术专家孟庆义对阿里HBase的数据管道设施实践与演进进行了讲解.主要从数据导入场景. HBase Bulkload功能.HImporter系统.数据导出场景. ...

  2. Bulk Load-HBase数据导入最佳实践

    一.概述 HBase本身提供了非常多种数据导入的方式,通常有两种经常使用方式: 1.使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase 2 ...

  3. 大数据查询——HBase读写设计与实践

    导语:本文介绍的项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的 ...

  4. 如何降低90%Java垃圾回收时间?以阿里HBase的GC优化实践为例

    过去的一年里,我们准备在Ali-HBase上突破这个被普遍认知的痛点,为此进行了深度分析及全面创新的工作,获得了一些比较好的效果.以蚂蚁风控场景为例,HBase的线上young GC时间从120ms减 ...

  5. 大数据查询——HBase读写设计与实践--转

    背景介绍 本项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的不断 ...

  6. 暑假第六周总结(对HBASE进行编程实践并且安装Redis)

    本周主要是根据教程对HBASE进行了编程实践,对于hadoop的编程来说需要用到很多的.jar 包,在进行编程实践的时候需要参照相关的教程将jar包添加至程序当中去.教程上给的代码还是比较详细的,加上 ...

  7. [平台建设] HBase平台建设实践

    背景 由于公司业务场景的需要,我们需要开发HBase平台,主要需要以下功能: 建表管理 授权管理 SDK实现 与公司内部系统打通 我们使用的HBase 版本: HBase 1.2.0-cdh5.16. ...

  8. Hadoop安全(1)——————美团Hadoop安全实践

    http://tech.meituan.com/hadoop-security-practice.html 前言 在2014年初,我们将线上使用的 Hadoop 1.0 集群切换到 Hadoop 2. ...

  9. HBase全网最佳学习资料汇总

    HBase全网最佳学习资料汇总 摘要: HBase这几年在国内使用的越来越广泛,在一定规模的企业中几乎是必备存储引擎,互联网企业阿里巴巴.百度.腾讯.京东.小米都有数千台的HBase集群,中国电信的话 ...

随机推荐

  1. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  2. convnet源代码解析(一):基础准备

    Jeremy Lin ConvNet是一个基于GPU实现的卷积神经网络开源码(C++11).是由多伦多大学的Geoffrey Hinton深度学习团队编写的,它的最初版本号是Hinton的学生Alex ...

  3. 本人会linux系统的各种版本的安装,近期发教程

    小弟虽然刚刚踏入职场,可是咱大学也不是打酱油过的啊,研究过各种版本系统的安装,也都均已经实践,勿喷,有问题 咱们可以相互探讨!

  4. 訪问的网页自己主动打开QQ对话

    今天訪问中国论文网,自己主动就弹出与QQ的对话框,非常是好奇.于是查看网页源码发现例如以下可疑处: <script type="text/javascript"> fu ...

  5. python 线程 进程 标识

    s = '%s%s%s%s%s%s%s%s' % ( time.strftime('%Y%m%d %H:%M:%S', time.localtime(time.time())), ' os.getpp ...

  6. YTU 1006: Hero In Maze

    1006: Hero In Maze 时间限制: 1000 Sec  内存限制: 64 MB 提交: 72  解决: 22 题目描述 500年前,Jesse是我国最卓越的剑客.他英俊潇洒,而且机智过人 ...

  7. bzoj-1192 [HNOI2006]鬼谷子的钱袋(水题)

    题目链接: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec  Memory Limit: 162 MB Description 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各 ...

  8. bzoj 1504 郁闷的出纳员

    题目大意: 有一些员工 他们有工资 当他们的工资低于一个值时 他们会永远离开 I命令 I_k 新建一个工资档案,初始工资为k.                 如果某员工的初始工资低于工资下界,他将立 ...

  9. 烹调方案 (DP)

    传送门 一道非常好的DP.看这个可能会觉得与01背包很像,不过这个的问题在于现做的菜肴会影响到后面的菜肴的价值. 我们在进行01背包DP时,一件物品的价值是不随着其被枚举的位置改变而改变的,但是这道题 ...

  10. [Django基础] django解决静态文件依赖问题以及前端引入方式

    一.静态文件依赖 学习django的时候发现静态文件(css,js等)不能只在html中引入,还要在项目的settings中设置,否则会报以下错误 [11/Sep/2018 03:18:15] &qu ...