HRegionServer



HBase的数据文件都存储在HDFS上,格式主要有两种:

- HFile:HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制文件,实际上StoreFile就是对HFile做了轻量级的包装,即StoreFile底层就是HFile

- HLog File:HBase中WAL(Write Ahead Log)的存储格式,物理上是Hadoop的Sequence File带项目符号的内容





- HRegionServer管理一些列HRegion对象

- 每个HRegion对应Table中一个Region,Hegion由多个HStore组成

- 每个HStore对应Table中一个Column Family存储

- Column Family就是一个集中的存储单元,故将具有相同IO的Column放在一个Column Family会更高效

HStore(MemStore和StoreFile)



- Client写入:存入MemStore,一直到MemStore满了->Flush成一个StoreFile,直至增长到一定阈值->发出Compact合并操作->多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除->当StoreFiles compact后,逐步形成越来越大的StoreFile->单个StoreFile大小超过一定阈值之后,触发Split操作,会把当前Region Split成2个Region,Region会下线,新Split出的2个孩子Region会被HMaster分配到响应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。

- HBase只是增加数据,所有的更新和删除操作,都是在Compact阶段做的,所以,用户写操作只需要进入内存即可立即返回,从而保证IO高性能



- StoreFile以HFile格式保存在HDFS上

- Data Block段保存表中的数据,这部分可以被压缩

- Meta Block段(可选)保存用户自定义的KV对,可以被压缩

- File Info段–HFile的元信息,不压缩,用户可以在这一部分添加自己的元信息

- Data Block Index段 -Data Block的索引。每条索引的Key是被索引的block的第一条记录的Key

- Meta Block Index段(可选)-Meta Block的索引

- Trailer -这一段是定长的,保存的是每一段的偏移量

压缩

- HFile的Data Block.Meta Block通常采用压缩方式存储;

好处:压缩之后可以大大减少网络IO和磁盘IO

坏处:需要花费cup进行压缩和解压缩

-HFlie支持的压缩格式:Gzip,Lzo,Snappy…

KeyValue存储结构





- HFile里面的每个KeyValue对就是一个简单的byte数组

- KeyLength和ValueLength:两个固定的长度,分别代表Key和Value的长度

- Key部分:Row Length是固定长度的数值,表示RowKey的长度,Row就是RowKey

- Column Family Length是固定长度的数值,表示Family的长度,接着就是Column Family,再接着是Qualifier,然后是两个固定长度的数值,表示TimeStamp和Key Type(Put/Delete)

- Value部分没有那么复杂的结构,就是纯粹的二进制数据

HLog文件结构





HBase数据存储的更多相关文章

  1. 使用MapReduce读取HBase数据存储到MySQL

    Mapper读取HBase数据 package MapReduce; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hba ...

  2. BigData NoSQL —— ApsaraDB HBase数据存储与分析平台概览

    一.引言 时间到了2019年,数据库也发展到了一个新的拐点,有三个明显的趋势: 越来越多的数据库会做云原生(CloudNative),会不断利用新的硬件及云本身的优势打造CloudNative数据库, ...

  3. HBase 数据存储结构

    在HBase中, 从逻辑上来讲数据大概就长这样: 单从图中的逻辑模型来看, HBase 和 MySQL 的区别就是: 将不同的列归属与同一个列族下 支持多版本数据 这看着感觉也没有那么太大的区别呀, ...

  4. 2.1-2.2 HBase数据存储

    一.HBase数据检索流程 一篇介绍HBase数据读写流程的解析的博文:http://hbasefly.com/2016/12/21/hbase-getorscan/?wsfatm=uqvhl3 1. ...

  5. hbase数据加盐(Salting)存储与协处理器查询数据的方法

    转自: https://blog.csdn.net/finad01/article/details/45952781 ----------------------------------------- ...

  6. HBase介绍(2)---数据存储结构

    在本文中的HBase术语:基于列:column-oriented行:row列组:column families列:column单元:cell 理解HBase(一个开源的Google的BigTable实 ...

  7. 万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系

    转自:http://www.infoq.com/cn/articles/trillion-log-and-data-storage-query-techniques?utm_source=infoq& ...

  8. Spark Streaming接收Kafka数据存储到Hbase

    Spark Streaming接收Kafka数据存储到Hbase fly spark hbase kafka 主要参考了这篇文章https://yq.aliyun.com/articles/60712 ...

  9. 大数据存储利器 - Hbase 基础图解

    由于疫情原因在家办公,导致很长一段时间没有更新内容,这次终于带来一篇干货,是一篇关于 Hbase架构原理 的分享. Hbase 作为实时存储框架在大数据业务下承担着举足轻重的地位,可以说目前绝大多数大 ...

随机推荐

  1. 20145303刘俊谦 Java 代码托管

    (20145303刘俊谦) Java 第三周代码托管 这是最近保存下来的代码,今天一起上传的,有很多在代码学习过程中无意识删掉了:

  2. 20145310 《Java程序设计》第5周学习总结

    20145310 <Java程序设计>第5周学习总结 教材学习内容总结 本周主要进行第八章和第九章的学习. java中所有的错误都会打包为对象,可以try catch代表错误的对象后做一些 ...

  3. 100个gdb调试技巧

    找到的一个有参考价值的关于GDB调试的站点:https://gitlore.com/subject/15

  4. RabbitMQ单机多实例配置

    由于某些因素的限制,有时候你不得不在一台机器上去搭建一个rabbitmq集群,当然这种集群只适合自己玩玩,验证下结论,这个有点类似zookeeper的单机版.真实生成环境还是要配成多机集群的.有关怎么 ...

  5. Excel导出失败的提示

    未处理System.InvalidCastException HResult=-2147467262 Message=无法将类型为“Microsoft.Office.Interop.Excel.App ...

  6. Graph_Master(连通分量_G_Trajan+Thought)

    Graph_Master~(连通分量) 题目大意:给出m条边(隧道,无向),每条边连接两个点(矿场).要在这些矿场中建设救援出口,防止矿场坍塌造成人员伤亡,问最少需要几个救援出口,以及对应方案数.(假 ...

  7. Python学习札记(十五) 高级特性1 切片

    参考: 高级特性 切片 Note 1.掌握了Python的基础语法之后,就可以写出很多很有用的程序了,比如打印1-90的奇数: #!/usr/bin/env python3 L = [] n = 1 ...

  8. .net的根目录区别

    很久没搞.net了,时间一场,全忘记了,倒,,, “~/” 是应用程序根目录“/”  也是表示根目录 “./” 是当前目录“../”表示当前目录的上一级目录

  9. PHP运算符-算术运算符、三元运算符、逻辑运算符

    运算符是用来对变量.常量或数据进行计算的符号,它对一个值或一组值执行一个指定的操作.PHP的运算符包括算术运算符.字符串运算符.赋值运算符.位运算符.逻辑运算符.比较运算符.递增或递减运算符.错误控制 ...

  10. [mybatis]Record与Example的用法

    一.Record 一个Record是一个Dao对象(继承Mapper接口),tkmybatis会将record自动映射成sql语句,record中所有非null的属性都作为sql语句,如: 映射的sq ...