hbase手动compact与split

#!/bin/bash

die () {
    echo >&2 "$@"
    echo "usage:"
    echo "       $0 check|split table_name [split_size]"
    exit 1
}

[[ "$#" -lt 2 ]] && die "at least 2 arguments required, $# provided"

COMMAND=$1
TABLE=$2
SIZE="${3:-1073741824}"

split() {
    region_key=`python /home/hduser/hbase/hbase-scan.py -t hbase:meta -f "RowFilter (=, 'substring:$1')"`
    echo "split '$region_key'" | hbase shell
}

if [ "$COMMAND" != "check" ] ; then
    for region in `hadoop fs -ls /hbase/data/default/$TABLE | awk {'print $8'}`
    do
        [[ ${region##*/} =~ ^\. ]] && continue
        [[ `hadoop fs -du -s $region | awk {'print $1'}` -gt $SIZE ]] && split ${region##*/}
    done

    # check after split
    sleep 60
fi

for region in `hadoop fs -ls /hbase/data/default/$TABLE | awk {'print $8'}`
do
    [[ ${region##*/} =~ ^\. ]] && continue
    [[ `hadoop fs -du -s $region | awk {'print $1'}` -gt $SIZE ]] && echo "${region##*/} (`hadoop fs -du -s -h $region | awk {'print $1 $2'}`) is a huge region" || echo "${region##*/} (`hadoop fs -du -s -h $region | awk {'print $1 $2'}`) is a small region"
done

hbase-scan.py

import subprocess
import datetime
import argparse
import csv
import gzip
import happybase
import logging

def connect_to_hbase():
    return happybase.Connection('itr-hbasetest01')

def main():
    logging.basicConfig(format='%(asctime)s %(name)s %(levelname)s: %(message)s',level=logging.INFO)

    argp = argparse.ArgumentParser(description='EventLog Reader')
    argp.add_argument('-t','--table', dest='table', default='eventlog')
    argp.add_argument('-p','--prefix', dest='prefix')
    argp.add_argument('-f','--filter', dest='filter')
    argp.add_argument('-l','--limit', dest='limit', default=10)

    args = argp.parse_args()

    hbase_conn = connect_to_hbase()

    table = hbase_conn.table(args.table)
    logging.info("scan start")
    scanner = table.scan(row_prefix=args.prefix, batch_size=1000, limit=int(args.limit), filter=args.filter)
    logging.info("scan done")
    i = 0
    for key, data in scanner:
        logging.info(key)
        print key
        i+=1

    logging.info('%s rows read in total', i)

if __name__ == '__main__':
    main()

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1717714

时间: 2024-09-18 12:42:23

hbase手动compact与split的相关文章

hbase源码系列(十四)Compact和Split

先上一张图讲一下Compaction和Split的关系,这样会比较直观一些. Compaction把多个MemStore flush出来的StoreFile合并成一个文件,而Split则是把过大的文件Split成两个. 之前在Delete的时候,我们知道它其实并没有真正删除数据的,那总不能一直不删吧,下面我们就介绍一下它删除数据的过程,它就是Compaction. 在讲源码之前,先说一下它的分类和作用. Compaction主要起到如下几个作用: 1)合并文件 2)清除删除.过期.多余版本的数据

HBase中如何解决Region Server Compact过程占用大量网络出口带宽的问题

HBase 0.92版本之后,Region Server的Compact过程根据待合并的文件大小分为small compaction和large compaction两种,由此可能导致在集群写入量大的时候Compact占用过多的网络出口带宽.本文将详细描述集群使用过程中遇到这一问题的排查过程及其解决方法. 1. 发现问题 HBase集群(版本为0.94.0)运行过程中,发现5台Region Server的网络出口带宽经常维持在100MB/s以上,接近到网卡的极限:同时Region Server的

HBase性能调优

因官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果.所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正. 配置优化 zookeeper.session.timeout默认值:3分钟(180000ms)说明:RegionServer与Zookeeper间的连接超时时间.当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的region

小米崔建伟答疑HBase在小米中的应用实践

2014年3月25日,CSDN在线培训:HBase在小米中的应用实践圆满结束,本次培训讲师是来自小米的崔建伟,他表示随着小米业务的逐渐扩展,特别是大数据时代的到来,原有的关系型数据库MySQL已经逐渐无法满足需求,因此向NoSQL迁移是很自然的事情. CSDN在线培训是专为广大技术从业人员准备的在线实时互动技术培训,邀请各个行业一线技术工程师分享他们工作中遇见的各种问题以及解决方案,同时给大家带来一些新技术.思路.解决方案! CSDN在线培训以"经典性.实战性.系统性.前瞻性.专业性"

HBase - 建表语句解析

像所有其他数据库一样,HBase也有表的概念,有表的地方就有建表语句,而且建表语句还很大程度上决定了这张表的存储形式.读写性能.比如我们熟悉的MySQL,建表语句中数据类型决定了数据的存储形式,主键.索引则很大程度上影响着数据的读写性能.虽然HBase没有主键.索引这些概念,但在HBase的世界里,有些东西和它们一样重要! 废话不说,直接奉上一条HBase建表语句,来为各位看官分解剖析: create 'NewsClickFeedback',{NAME=>'Toutiao',VERSIONS=>

HBase写数据过程

博文说明:1.研究版本HBase 0.94.12:2.贴出的源代码可能会有删减,只保留关键的代码. 从client和server两个方面探讨HBase的写数据过程. 一.client端 1.写数据API 写数据主要是HTable的单条写和批量写两个API,源码如下: //单条写API public void put(final Put put) throws IOException { doPut(put); if (autoFlush) { flushCommits(); } } //批量写A

HBase源码分析之HRegion上MemStore的flsuh流程(二)

        继上篇<HBase源码分析之HRegion上MemStore的flsuh流程(一)>之后,我们继续分析下HRegion上MemStore flush的核心方法internalFlushcache(),它的主要流程如图所示:         其中,internalFlushcache()方法的代码如下: /** * Flush the memstore. Flushing the memstore is a little tricky. We have a lot of upda

HBase源码分析之MemStore的flush发起时机、判断条件等详情

        前面的几篇文章,我们详细介绍了HBase中HRegion上MemStore的flsuh流程,以及HRegionServer上MemStore的flush处理流程.那么,flush到底是在什么情况下触发的呢?本文我们将详细探究下HBase中MemStore的flush流程的发起时机,看看到底都有哪些操作,或者哪些后台服务进程会触发MemStore的flush.         首先,在<HBase源码分析之HRegionServer上MemStore的flush处理流程(一)>和

淘宝实时数据传输平台: TimeTunnel介绍

作者在工作中遇到了类似流式数据实时接入的业务场景,所以对淘宝的实时数据仓库这一块做了一些调研和了解.本文从业务场景和设计上介绍了淘宝的TimeTunnel工具,文中的图片来自淘宝数据仓库团队交流过程中的sildes,也参考了一些相关文档. 业务背景 TimeTunnel(简称TT)是一个基于thrift通讯框架搭建的实时数据传输平台,具有高性能.实时性.顺序性.高可靠性.高可用性.可扩展性等特点(基于Hbase). 目前TimeTunnel在阿里巴巴广泛的应用于日志收集.数据监控.广告反馈.量子