什么是HBase的Region?

  大家一定对一个词不陌生:域分区,这个域就是Region;Region定义为key的一个取值范围的子集的数据载体;比如常见的域分区有固定大小分区,比如1-10一个region,2-50一个region以此类推;不过更常见的Hash分区;但是region在每台机器的物理实现上对应的是HFile;region的分割的逻辑,其实是指region的物理实现HFile的分割。

  那么HFile的分割之后数据是一分为二了,那么未来向HFile中插入数据的时候怎么知道向那个HFile中插入呢?其实每个HFile都会有自己的startRowKey以及endRowKey;被一分为二的HFile在META表中会被重新分配startRowKey以及endRowKey信息;这个两个HFile的startRowKey以及EndRowkey的合集的区间是split前的HFile的范围。

  那么什么是HFile,和region到底是什么关系?我们首先看一下hbase官方的一张图:

  一个Table在每个region server上面对应一个或者多个region,这里region概念其实就是一个RowSet(在KUDU里面就是称之为rowset)。一个Region在存储时候,会刷到一个或者多个HFile中,因为HFile是和ColumnFamily(CF)对应,如果一个Tabe中有多个CF,那么一个Region就会对应多个HFile;在物理实现上,其实每个CF对应一个MemStore,当(任何一个)MemStore的大小达到一定程度之后,将会把所有的Memstore刷到一个新的HFile中;当HFile达到了一定数量之后,将会触发合并(合并时机有三:memestore在flush的时候,HBase后台定时线程跑,手动跑)这里注意,合并有minor和major两种,生产环境一般会关闭major,因为会影响读写,手动在业务少的时候触发。然后当HFile达到一定大小后,将会进行分割,分割的原则就是对半分,整体来讲Region的key值范围不变,只不过分成两个文件而已;然后Region Server将会通知META,对于region的取值范围对应的HFile进行修改。

  因为HBase对于多于两个CF支持并不好,其实HBase更加支持一个CF,这样在MemStore刷硬盘的时候不会有连带反应(一个memstore还很少,被迫刷盘),如果这样看来其实列式存储的特性并不明显,因为在每个HFile中还是row的形式存储。但是HBase和传统数据差别还是在于数据分块存储,这样可以进行并行查询,提高查询效率。

  分片,就是分片,一个region就是一个数据分片;就是elasticsearch里面的分片;一个索引相当于HBase里面的table概念(到了6之后是这样,ES5的时候index还是库概念)。

  其实到了这里,你会发现,HBase严格来讲并不是列式存储,或者说列族存储更合适一些,因为其本质是key-value的存储机制,当一条数据PUT到HBase的Region Server,其实内部处理是把这一条记录拆开来,每个cell配上相同的rowkey(rowkey早就存在的,其实打到那个region server就是根据rowkey来路由的,rowkey是client端根据规则生成)。所以说HBase是key-value存储更加合适一些,这里和MongoDB比较类似,MongoDB相对而言是比较轻量级的Key-value数据库,因为没有和HDFS绑扎一起。

HBase,region以及HFile概念的更多相关文章

  1. 【原创】大叔问题定位分享(13)HBase Region频繁下线

    问题现象:hive执行sql报错 select count(*) from test_hive_table; 报错 Error: java.io.IOException: org.apache.had ...

  2. 【转】HBASE Region in Transition issue on Master UI

    [From]https://community.hortonworks.com/content/supportkb/244808/hbase-region-in-transition-issue-on ...

  3. Hbase原理、基本概念、基本架构

    来源:http://blog.csdn.net/woshiwanxin102213/article/details/17584043 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBas ...

  4. [Hbase]Hbase章1 Hbase框架及基本概念

    Hbase框架介绍 HBase是一个分布式的.面向列的开源数据库. 不同点: l  和一般的关系数据库不同,hbase是一个适合于非结构化数据存储的数据库. l  Hbase是基于列而不是基于行的模式 ...

  5. HBase Region重点剖析

    Region的概念 Region是HBase数据管理的基本单位.数据的move,数据的balance,数据的split,都是按照region来进行操作的. region中存储这用户的真实数据,而为了管 ...

  6. HBase Region级别二级索引

    我们会经常谈及二级索引,这是对全表数据进行另外一种方式的组织存储,是针对table级别的.如果要为HBase上的表实现一个强一致性的二级索引,那么就无法逃避分布式事务,而这一直是用户最期待的功能. 而 ...

  7. HBase Region合并分析

    1.概述 HBase中表的基本单位是Region,日常在调用HBase API操作一个表时,交互的数据也会以Region的形式进行呈现.一个表可以有若干个Region,今天笔者就来和大家分享一下Reg ...

  8. HBase Region分裂实现

    分裂策略 不同的分裂策略的实现需要继承RegionSplitPolicy,主要实现两个方法: shouldSplit()表示是否需要分裂 getSplitPoint()得到分裂点rowkey 从 HB ...

  9. HBase数据模型的一些概念

    首先来先理解一个概念:HBase是一种列式存储的分布式数据库. 表              在HBase中数据以表的形式存储.使用表的主要原因是把某些列组织起来一起访问,同一个表中的数据通常是相关的 ...

随机推荐

  1. Linux /python --- zipinfo命令

    Linux zipinfo命令用于列出压缩文件信息. 执行zipinfo指令可得知zip压缩文件的详细信息. zipinfo [-12hlmMstTvz][压缩文件][文件...][-x <范本 ...

  2. bzoj1612 / P2419 [USACO08JAN]牛大赛Cow Contest(Floyd)

    P2419 [USACO08JAN]牛大赛Cow Contest Floyd不仅可以算最短路,还可以处理点之间的关系. 跑一遍Floyd,处理出每个点之间是否有直接或间接的关系. 如果某个点和其他$n ...

  3. 20145122 《Java程序设计》第5周学习总结

    教材学习内容总结 1.在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中. 2.受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕 ...

  4. openwrt下使用wget出现Failed to allocate uclient context

    一.场景重现 root@OpenWrt:/# wget www.baidu.com Downloading 'www.baidu.com' Failed to allocate uclient con ...

  5. Vue+Webpack配置css-loader时报错:Module build failed: Unknown word

    使用Vue+Webpack搭建工程时,在webpack.config.js中的module的rules里针对各种文件配置加载工具.在针对css文件配置时遇到一个问题:打包构建时报错——Module b ...

  6. 关于JS和JSON

    讲得不准确! 看网课,JS也算是面向对象的一门语言,不过其是解释性的脚本语言. JSON是把用JS的表示法将数据包装起来进行传递用的. JS语法是松散型的,没有int String这些像JAVA里的类 ...

  7. 测试工程师 技能要求:java编程,数据库,linux操作系统,自动化测试开发,性能测试,安全测试

    1.具有开发和测试经验,能负责带领大型项目测试 2.掌握或熟悉java编程,熟悉mysql,oracle等db,memcache,nosql等,有互联网行业从业经验 3.可撰写自动化测试工具以及搭建自 ...

  8. linux中find与rm实现查找并删除目录或文件

    linux 下用find命令查找文件,rm命令删除文件. 删除指定目录下指定文件find 要查找的目录名 -name .svn |xargs rm -rf 删除指定名称的文件或文件夹: find -t ...

  9. pku 2284 That Nice Euler Circuit

    题意: 给你n个点第n个点保证与第0个点相交,然后求这n个点组成的图形可以把整个平面分成几个面 思路: 这里的解题关键是知道关于多面体的欧拉定理 多面体: 设v为顶点数,e为棱数,f是面数,则v-e+ ...

  10. C++中ceil、floor和round的区别

    Math类中提供了三个与取整有关的方法:ceil,floor,round,这些方法的作用于它们的英文名称的含义相对应 1.ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3 ...