有一段实践没有写东西了,最近组里面来了两个新的小伙伴,并且一起针对目前的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. Pacemaker 安装与使用

    Pacemaker 仅仅做资源管理器(CRM).底下的消息系统採用 corosync. 安装 以 ubuntu 为例, sudo aptitude install -y pacemaker coros ...

  2. 微信小程序之 SideBar(侧栏分类)

    项目目录: 模拟数据: utils / data.js function getSData() { var data = [ { "id": 1, "tree" ...

  3. asp.net mvc的权限管理设计

    现在集中展示用户-角色-权限管理的功能,因此,所有数据表一律简化处理.   1 后台管理效果 (1)角色管理 (2)权限管理   2 数据库设计(MSSQL) (1)用户表dbo.Users 项 类型 ...

  4. 操作系统学习笔记:I/O输入系统

    计算机两大主要任务:IO操作和计算处理.许多情况下,主要是IO操作,计算处理只是附带的(而操作系统的两大任务是管理物理设备和为应用程序提供一个虚拟机器的抽象).操作系统在IO方面的作用是管理IO操作和 ...

  5. SQLServer删除数据库

    删除时提示: 网上找了一段: USE MASTER GO DECLARE @dbname SYSNAME SET @dbname = 'shujk' --这个是要删除的数据库库名 ) DECLARE ...

  6. HDU1257 最少拦截系统 —— 贪心

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1257 最少拦截系统 Time Limit: 2000/1000 MS (Java/Othe ...

  7. mac系统下配置域名映射关系

    1.cd /private/etc/ 先修改权限:sudo chmod 777 hosts vi hosts localhost:etc mhx$ cat hosts ## # Host Databa ...

  8. UICollectionView与UITableView混用手势冲突

    前言 最近在重构某个模块,以后别人封装的所谓的基类就像一坨死一样,看见就恶心,相信同行的你们能够明白那种心情.为什么要重构?并不是真的因为它像一坨死,而是因为这个模块是用户使用最频繁的,而且出现了不少 ...

  9. 【AHOI 2005】 约数研究

    [题目链接] 点击打开链接 [算法] 要求M,显然可以通过约数个数定理从1..N暴力计算答案,然而n最大10^6,这个算法的时间复杂度是 O(N * sqrt(N))的,不能通过此题 因此我们换一种思 ...

  10. python-----flask项目端口设置无效

    最近在做flask项目时发现了一个问题,在项目里写: app.run(host='0.0.0.0',port=9000) 但启动时,还是使用5000端口启动的. 后来经过测试,解决方法有两个: 如果启 ...