有一段实践没有写东西了,最近组里面来了两个新的小伙伴,并且一起针对目前的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. vue-cli3取掉eslint格式提示报错

    把package.json文件中关于eslint那个直接去掉. "@vue/cli-plugin-eslint": "^3.7.0",

  2. js 变量、函数提升

    js 变量.函数提升 先简单理解下作用域的概念,方便对变量与函数提升的概念的理解 function foo() { var x = 1; if (x) { var x = 2; } console.l ...

  3. Linux下用Xdebug调试php

    Linux下用Xdebug调试php 博客分类: php PHPLinuxZendEclipseC# 为了调试PHP程序,安装一下xdebug. 官方网址: http://www.xdebug.org ...

  4. Android碎纸机效果

    1.总体思想 活用padding和margin 2.实现过程 public class PopupShredderView extends FrameLayout{ public PopupShred ...

  5. 实现@using{}代码块

    前几天,我要写个插件,放在asp.net mvc的view上.这需要写一些扩展HtmlHelper功能的方法.这些方法的一个参数是一段javascript代码. 假如这个参数类型是字符型,当然很简单了 ...

  6. cocos2dx笔记1:概述

    1.核心的类和功能 CCDirector gameLoop,实现场景绘制.多个场景之间切换控制.控制游戏的停止,暂停,等生命周期. CCScene 场景类,每一个场景能够理解为一个游戏镜头.状态 CC ...

  7. YTU 1075: Time

    1075: Time 时间限制: 1 Sec  内存限制: 128 MB 提交: 7  解决: 7 [提交][状态][讨论版] 题目描述 Digital clock use 4 digits to e ...

  8. javascript函数参数、返回值类型检查

    实现带参数.返回值类型声明的js函数: 类型定义:window.Str = Type.Str = Type.define('STRING', Type.isStr);var Per = Type.de ...

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

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

  10. hdu 2476 (string painter) ( 字符串刷子 区间DP)

    String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...