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中数据以表的形式存储.使用表的主要原因是把某些列组织起来一起访问,同一个表中的数据通常是相关的 ...
随机推荐
- Python3.x:基础学习
Python3.x:基础学习 1,Python有五种标准数据类型 1.数字 2.字符串 3.列表 4.元组 5.字典 (1).数字 数字数据类型存储数字值.当为其分配值时,将创建数字对象. var1 ...
- sqlmap简单使用方法
sqlmap使用 注入点 http://1xx.xxx.xxx.xxxx/dvwa/vulnerabilities/sqli/index.php?id=1&Submit=Submit# 通 ...
- springboot中websoket的使用
知识点:springboot项目中,websoket实时推送技术的介绍与使用 一.双向通信 http协议通信只能由客户端发起请求,服务端返回查询结果,如果我们想定时获取服务端的状态变化,相对 ...
- msgsrvmgr.cpp:5:37: fatal error: kdl_conversions/kdl_msg.h: No such file or directory #include <kdl_conversions/kdl_msg.h>
/home/xxx/ros_workspace/src/bp_protocol_bridge/protospot/src/msgsrvmgr.cpp::: fatal error: kdl_conve ...
- QWebEngineView_简单例子_01
工程名 : WebEngine01 1.WebEngine01.pro #------------------------------------------------- # # Project c ...
- 【转】Scala基础知识
原文地址.续 课程内容: 关于这节课 表达式 值 函数 类 继承 特质 类型 apply方法 单例对象 函数即对象 包 模式匹配 样本类 try-catch-finally 关于这节课 最初的几个星期 ...
- JavaScript--语法2--语句结构
JavaScript--语句结构 一.心得 判断的时候常量放左边java中switch只支持四种类型,javaScript是弱类型,所有的都支持. 显示方法: 77 // alert("x= ...
- python 正则表达式详解
正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...
- AndroidStudio怎样导入library项目开源库
AndroidStudio是一款非常强大的android程序开发软件,在里面集成了几乎所有android开发中需要使用的工具,编译.运行.打包.开发.调试等功能一应俱全,可以使用起来非常方便. 今天要 ...
- UVA-11903 Just Finish it up
题目大意:一个环形跑道上有n个加油站,每个加油站可加a[i]加仑油,走到下一站需要w[i]加仑油,初始油箱为空,问能否绕跑道一圈,起点任选,若有多个起点,找出编号最小的. 题目分析:如果从1号加油站开 ...