HBase如何选取split point

hbase region split操作的一些细节,具体split步骤很多文档都有说明,本文主要关注regionserver如何选取split point

首先推荐web ui查看hbase region分布的一个开源工具hannibal,建议用daemontool管理hannibal意外退出,自动重启,之前博文写了博文介绍如何使用daemontool管理

假设有一张hbase的table如下表所示,有一个region的大小比较大,可以对这个region进行手动split操作

HBase的物理存储树状图如下

Table       (HBase table)
    Region       (Regions for the table)
         Store          (Store per ColumnFamily for each Region for the table)
              MemStore        (MemStore for each Store for each Region for the table)
              StoreFile       (StoreFiles for each Store for each Region for the table)
                    Block     (Blocks within a StoreFile within a Store for each Region for the table)

一种常见的分裂策略是:ConstantSizeRegionSplitPolicy,配置hbase.hregion.max.filesize是指某个store(对应一个column family)的大小

/<hdfs-dir>/<hbasetable>/<xxx(part of region-id)>/<columu-family>

memstore flush到store files时,或者多个store files compact操作时候,会判断是否需要split。

找到最大且不包含reference的store,在这个store下面找到最大的storefile,然后用这个storefile的中间rowkey作为split的点。

RegionSplitPolicy.java
Iterator i$ = stores.values().iterator();

while(i$.hasNext()) {
  Store s = (Store)i$.next();
  byte[] splitPoint = s.getSplitPoint();
  long storeSize = s.getSize();
  if(splitPoint != null && largestStoreSize < storeSize) {
    splitPointFromLargestStore = splitPoint;
    largestStoreSize = storeSize;
  }
}
Store.java

public byte[] getSplitPoint() {
    long e = 0L;
    StoreFile largestSf = null;
    Iterator r = this.storefiles.iterator();

    StoreFile midkey;
    while (r.hasNext()) {
      midkey = (StoreFile) r.next();
      org.apache.hadoop.hbase.regionserver.StoreFile.Reader mk;
      if (midkey.isReference()) {
        assert false : "getSplitPoint() called on a region that can\‘t split!";

        mk = null;
        return (byte[]) mk;
      }

      mk = midkey.getReader();
      if (mk == null) {
        LOG.warn("Storefile " + midkey + " Reader is null");
      } else {
        long fk = mk.length();
        if (fk > e) {
          e = fk;
          largestSf = midkey;
        }
      }
    }

    org.apache.hadoop.hbase.regionserver.StoreFile.Reader r1 = largestSf.getReader();
    if (r1 == null) {
      LOG.warn("Storefile " + largestSf + " Reader is null");
      midkey = null;
      return (byte[]) midkey;
    }

    byte[] midkey1 = r1.midkey();
    //...略
}

所以split实际上并不是完全的等分,因为split point不一定是数据分布的中位点。

参考:

http://blog.javachen.com/2014/01/16/hbase-region-split-policy.html

http://www.cnblogs.com/niurougan/articles/3975463.html

http://hbase.group.iteye.com/group/topic/40359

时间: 2024-10-14 03:51:31

HBase如何选取split point的相关文章

Hbase split的三种方式和split的过程

在Hbase中split是一个很重要的功能,Hbase是通过把数据分配到一定数量的region来达到负载均衡的.一个table会被分配到一个或多个region中,这些region会被分配到一个或者多个regionServer中.在自动split策略中,当一个region达到一定的大小就会自动split成两个region.table在region中是按照row key来排序的,并且一个row key所对应的行只会存储在一个region中,这一点保证了Hbase的强一致性 . 在一个region中有

HBase Split

HBase表的结构如下: 每个Table由若干个Region组成,每个Region由若干个Store组成(每个列组构成一个Store),每个由一个MemStore和若干个StoreFiles(HFiles)组成,每个StoreFile由若干个Blocks组成. HBase对表进行split有三种方式:Pre-splitting,Auto splitting,Forced Splits. Pre-splitting 如果一个节点有过多的读写操作,HBase可能会因为Zookeeper的连接超时而关

你想要的 HBase 原理都在这了

目录 一. 集群架构 集群角色 工作机制 二.存储机制 A. 存储模型 B. LSM 与 Compaction C. Region 分裂 D. 自动均衡 三.访问机制 四. 鉴权 五. 高可靠 1.集群高可靠 2. 隔离性 3. 容灾 参考文档 在前面的文章中,介绍过 HBase 的入门操作知识,但对于正考虑将 HBase 用于生产系统的项目来说还是远远不够. 一般在对 HBase 做选型之前,还需要学习一些它的架构原理.弹性扩展及可靠性方面的知识. 本文来自笔者此前对 HBase 做的学习概括

HBase参数配置及说明

转自:http://www.cnblogs.com/nexiyi/p/hbase_config_94.html 目的是看下生产环境配置与默认配置情况. hbase.hregion.max.filesize:100G hbase.regionserver.hlog.blocksize:512M hbase.regionserver.maxlogs:32 ............. 版本:0.94-cdh4.2.1 hbase-site.xml配置 hbase.tmp.dir 本地文件系统tmp目录

region split流程分析

region split流程分析 splitregion的发起主要通过client端调用regionserver.splitRegion或memstore.flsuh时检查并发起. Client通过rpc调用regionserver的splitRegion方法 client端通过HBaseAdmin.split传入regionname与splitpoint(切分的rowkey,能够不传入), 通过meta得到此region所在的server,发起rpc请求,调用HRegionServer.spl

HBase 在HDFS 上的目录树

总所周知,HBase 是天生就是架设在 HDFS 上,在这个分布式文件系统中,HBase 是怎么去构建自己的目录树的呢? 这里只介绍系统级别的目录树. 一.0.94-cdh4.2.1版本 系统级别的一级目录如下,用户自定义的均在这个/hbase 下的一级子目录下 /hbase/-ROOT- /hbase/.META. /hbase/.archive /hbase/.corrupt /hbase/.hbck /hbase/.logs /hbase/.oldlogs /hbase/.snapshot

hbase性能调优(1)

hbase性能调优 标签: hbase 性能调优 | 发表时间:2014-05-17 15:10 | 作者:无尘道长 分享到: 出处:http://www.iteye.com 一.服务端调优 1.参数配置 1).hbase.regionserver.handler.count:该设置决定了处理RPC的线程数量,默认值是10,通常可以调大,比如:150,当请求内容很大(上MB,比如大的put.使用缓存的scans)的时候,如果该值设置过大则会占用过多的内存,导致频繁的GC,或者出现OutOfMem

Hbase Region Server整体架构

Region Server的整体架构 本文主要介绍Region的整体架构,后续再慢慢介绍region的各部分具体实现和源码 RegionServer逻辑架构图 RegionServer职责 1.      监听协作,通过zk来侦听master.meta位置.集群状态等信息的变化,更新本地数据. 2.      管理region的offline.online.open.close等操作,这些操作是和hmaster配合这来做的,region的状态有如下这些 offline.opening.open.

淘宝在hbase中的应用和优化

本文来自于NoSQLFan联合作者@koven2049,他在淘宝从事Hadoop及HBase相关的应用和优化.对Hadoop.HBase都有深入的了解,本文就是其在工作中对HBase的应用优化小结,分享给大家. 目 录 [ - ] 前言 原因 应用情况 部署.运维和监控 测试与发布 改进和优化 将来计划 前言 hbase是从 hadoop中分离出来的apache顶级开源项目.由于它很好地用java实现了google的bigtable系统大部分特性,因此在数据量猛增的今天非常受到欢迎.对于淘宝而言