HBase,region以及HFile概念
什么是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概念的更多相关文章
- 【原创】大叔问题定位分享(13)HBase Region频繁下线
问题现象:hive执行sql报错 select count(*) from test_hive_table; 报错 Error: java.io.IOException: org.apache.had ...
- 【转】HBASE Region in Transition issue on Master UI
[From]https://community.hortonworks.com/content/supportkb/244808/hbase-region-in-transition-issue-on ...
- Hbase原理、基本概念、基本架构
来源:http://blog.csdn.net/woshiwanxin102213/article/details/17584043 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBas ...
- [Hbase]Hbase章1 Hbase框架及基本概念
Hbase框架介绍 HBase是一个分布式的.面向列的开源数据库. 不同点: l 和一般的关系数据库不同,hbase是一个适合于非结构化数据存储的数据库. l Hbase是基于列而不是基于行的模式 ...
- HBase Region重点剖析
Region的概念 Region是HBase数据管理的基本单位.数据的move,数据的balance,数据的split,都是按照region来进行操作的. region中存储这用户的真实数据,而为了管 ...
- HBase Region级别二级索引
我们会经常谈及二级索引,这是对全表数据进行另外一种方式的组织存储,是针对table级别的.如果要为HBase上的表实现一个强一致性的二级索引,那么就无法逃避分布式事务,而这一直是用户最期待的功能. 而 ...
- HBase Region合并分析
1.概述 HBase中表的基本单位是Region,日常在调用HBase API操作一个表时,交互的数据也会以Region的形式进行呈现.一个表可以有若干个Region,今天笔者就来和大家分享一下Reg ...
- HBase Region分裂实现
分裂策略 不同的分裂策略的实现需要继承RegionSplitPolicy,主要实现两个方法: shouldSplit()表示是否需要分裂 getSplitPoint()得到分裂点rowkey 从 HB ...
- HBase数据模型的一些概念
首先来先理解一个概念:HBase是一种列式存储的分布式数据库. 表 在HBase中数据以表的形式存储.使用表的主要原因是把某些列组织起来一起访问,同一个表中的数据通常是相关的 ...
随机推荐
- INNODB存储引擎表空间
这片文章主要是对innodb表空间的一些说明: innodb中表空间可以分为以下几种: 系统表空间 独立表空间 undo表空间 临时表空间(temporary tablespace) 通用表空间(ge ...
- Mysql优化_ORDER BY和GROUP BY 的优化讲解(单路排序和双路排序)
ORDER BY 子句尽量使用Index方式排序,避免使用FileSort方式排序,尽可能在索引列上外城排序操作,遵照索引键的最佳左前缀.如果不在索引列上,FileSort有两种算法,Mysql就要启 ...
- BZOJ2209: [Jsoi2011]括号序列
传送门 splay练习. 考虑把括号序列转化成类似于区间最大/最小值的情况. 显然我们可以知道括号序列消完的情况肯定是$a$个)和$b$个(,那么把这些括号全部合法化的代价显然就是$\frac{a+1 ...
- A8逻辑篇1.点亮一个LED(S5PV210.A8)
一.虚拟机安装好后,我们用Fedora 双击.vmx文件,将会在虚拟机中打开 相应的生成: 这些文件 二.进入虚拟机页面 等待启动 账号选择其他 用户名:root 密码:111111 设置页面大小: ...
- FastCGI介绍及Nginx fastcgi配置优化
FastCGI介绍 FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务 ...
- Tensorflow1.5.0+cuda9.0+cudnn7.0+gtx1080+ubuntu16.04
目录 Tensorflow1.5.0+cuda9.0+cudnn7.0+gtx1080+ubuntu16.04 0. 前记 1. 环境说明 2. 安装GTX1080显卡驱动 3. CUDA 9.0安装 ...
- zookeeper的安装和部署
参考: https://testerhome.com/topics/11361 http://blog.csdn.net/lihao21/article/details/51778255 https: ...
- vim中将tab 设置成4个空格
在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:set ts=4 (注:ts是tabstop的缩写,设TAB宽4个空格)set expandtab 对于已保存的文件,可以使用 ...
- 如何在.Net的MySqlCommand里面使用MySql用户自定义变量?
Mysql使用@符号代表变量,但C#也恰好使用@代表用户自定义变量,这样两者就会正好冲突了. SELECT () AS rowId, u.*, r.RoleName FROM userinfo u L ...
- poj 2096 Collecting Bugs 概率dp 入门经典 难度:1
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 2745 Accepted: 1345 ...