HBase的数据模型

HBase中表的逻辑结构

Name Space(命名空间)

类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表default 表是用户默认使用的命名空间

Region(子表)

类似于一个表的子表,表中的一部分。HBase中的一个表被拆分成多个region。HBase 定义表时只需要声明列族即不需要声明具体的列。这意味着,往 HBase 写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。

RowKey(主键)

Rowkey的概念和mysql中的主键是完全一样的,HBase使用Rowkey来唯一的区分某一行的数据。在 HBase 内部,rowkey 保存为字节数组。HBase 会对表中的数据按照 rowkey 排序 (字典顺序)。三原则:散列、长度短、唯一

HBase只支持3中查询方式:

  • 基于Rowkey的单行查询
  • 基于Rowkey的范围扫描
  • 全表扫描

ColumnFamily(列族)

Hbase通过列族划分数据的存储,列族下面可以包含任意多的列,实现灵活的数据存取。就像是家族的概念,我们知道一个家族是由于很多个的家庭组成的。列族也类似,列族是由一个一个的列组成(任意多)。Hbase表的创建的时候就必须指定列族。就像关系型数据库创建的时候必须指定具体的列是一样的。
注意:Hbase的列族不是越多越好,官方推荐的是列族最好小于或者等于3。我们使用的场景一般是1个列族。

Column(列)

列就是列族下的部分,类似于家族中的每个成员

TimeStamp(时间戳)

用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入 HBase 的时间。

为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase 提供了两种数据版本回收方式:

1、保存数据的最后 n 个版本

2、保存最近一段时间内的版本(设置数据的生命周期 TTL)

Cell(单元)

由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell 中的数
据是没有类型的,全部是字节码形式存贮

HBase的物理结构

Hbase的存储原理

LSM的原理

就是将一个大的B(B+)树拆分成N棵小树数据首先写入内存中(有序),随着数据写入越来越多,内存中的数据会被flush到磁盘中形成一个文件;在读取数据时,则需要合并磁盘中历史数据和内存中最近修改的操作后返回

  • 1、数据是顺序写入:因此LSM的写入性能非常高
  • 2、定时将磁盘中的多个文件(小树)进行合并:优化读性能

Hbase的存储介绍

HBase在存储上是基于LSM树实现的。在HBase的实现中,内存中的数据则是对应于MemStore,而磁盘中的数据则对应于StoreFile(HFile实现)。当MemStore写满后会Flush到一个HFile中。随着HFile文件的不断增多,Region的读性能就会受到影响(IOPS增加)。因此HBase的Region Server会定期进行Compaction操作,将多个HFile合并为一个大的有序的HFile

HBase的架构

Client

客户端,访问用户数据前需要首先访问 ZooKeeper,找到-ROOT-表的 Region 所在的位置,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过 client 端会做 cache 缓存。

.META.表:记录了用户所有表拆分出来的的 Region 映射信息,.META.可以有多个 Regoin。

-ROOT-表:记录了.META.表的 Region 信息,-ROOT-只有一个 Region,无论如何不会分裂。

ZooKeeper

  • ZooKeeper 为 HBase 提供 Failover 机制,选举 HMaster,避免单点HMaster 单点故障问题。
  • 存储所有 Region 的寻址入口:-ROOT-表在哪台服务器上。-ROOT-这张表的位置信息。
  • 实时监控 RegionServer 的状态,将 RegionServer 的上线和下线信息实时通知给 Master。
  • 存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family。

HMaster

  • 为 RegionServer 分配 Region。
  • 负责 RegionServer 的负载均衡。
  • 发现失效的 RegionServer 并重新分配其上的 Region。
  • HDFS 上的垃圾文件(HBase)回收。
  • 处理 Schema 更新请求(表的创建,删除,修改,列簇的增加等等)。

RegionServer

  • RegionServer 维护 Master 分配给它的 Region,处理对这些 Region 的 IO 请求。
  • RegionServer 负责 Split 在运行过程中变得过大的 Region,负责 Compact 操作。

HRegion(Hbase中分布式存储和负载均衡的最小单元

Hbase里的一个Table 在行的方向上分割为多个HRegion。即HBase中一个表的数据会被划分成很多的HRegion,HRegion可以动态扩展并且HBase保证HRegion的负载均衡。HRegion实际上是行键排序后的按规则分割的连续的存储空间

一张Hbase表,可能有多个HRegion,每个HRegion达到一定大小时,进行分裂(这个大小由hbase.hregion.max.filesize指定,默认为10GB)。HRegion的拆分和转移是由HBase(HMaster)自动完成的,用户感知不到

store

每一个region由一个或多个store组成,hbase会把一起访问的数据放在一个store里面,即为每个 ColumnFamily建一个store,如果有几个ColumnFamily,也就有几个Store一个Store由一个memStore和0或者多个StoreFile组成HBase以store的大小来判断是否需要切分region

MemStore

memStore 是放在内存里的。保存修改的数据即keyValues。当memStore的大小达到一个阀值(默认128MB)时,memStore会被flush到文 件,即生成一个快照。目前hbase 会有一个线程来负责memStore的flush操作。

StoreFile

memStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存

HFile

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

HLog

WAL意为write ahead log,用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复。

HBase的数据模型和存储原理相关推荐

  1. 【图文详解】HBase 的数据模型与架构原理详解

    HBase 简介 https://hbase.apache.org/ HBase, Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩. 实时读写的分布式开源 NoSQL 数据库, ...

  2. HBase数据模型和读写原理

    Hbase的数据模型和读写原理: ​ HBase是一个开源可伸缩的分布式数据库,他根据Google Bigtable数据模型构建在hadoop的hdfs存储系统之上. ​ HBase是一个稀疏.多维度 ...

  3. HBase底层存储原理——我靠,和cassandra本质上没有区别啊!都是kv 列存储,只是一个是p2p另一个是集中式而已!...

    理解HBase(一个开源的Google的BigTable实际应用)最大的困难是HBase的数据结构概念究竟是什么?首先HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不 ...

  4. 【生活现场】从洗袜子到hbase存储原理解析

    郑重声明:漫画人物和故事情节均是原创,未经同意禁止任何形式的转载,侵权将进入法律程序.大佬除外. 欢迎大家转发文章,谢谢! 小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面 ...

  5. 分布式存储综述、存储原理与设计

    目录 分布式存储概念 分布式文件系统的发展 分布式存储系统的分类 数据类型三大类 分布式存储类型 分布式存储系统的特性 单机存储原理与设计 多机存储原理与设计 FLP定理与设计 CAP定理与设计 2P ...

  6. MongoDB存储原理和基本概念

    mongodb基本概念 ①.mongodb是属于文档型的非关系型数据库 ②. mongodb 数据库和关系型数据库概念一致,mongodb集合就是关系型数据库的表, mongodb文档就是关系型数据库 ...

  7. 基于HBase的大数据存储在京东的应用场景

    引言 HBase是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,适用于结构化的存储,底层依赖于Hadoop的HDFS,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群.因 ...

  8. Redis如何实现分布式锁延时队列以及限流应用丨Redis源码原理|跳表|B+树|分布式锁|中间件|主从同步|存储原理

    Redis如何实现分布式锁延时队列以及限流应用 视频讲解如下,点击观看: Redis如何实现分布式锁延时队列以及限流应用丨Redis源码原理|跳表|B+树|分布式锁|中间件|主从同步|存储原理|数据模 ...

  9. HBase中的快照技术-原理和实践

    这都是我自己的随笔,有错误请指正. 用法 在hbase shell下执行 创建  snapshot 'tablename','snapshot_name' 删除  delete_snapshot 's ...

最新文章

  1. HTML5 虚拟键盘出现挡住输入框的解决办法
  2. ie浏览器修复_Win7或Win8系统变慢,功能没法用,如何一键修复系统?
  3. html 数据库 编写学生表,用sql语句创建学生表如何做
  4. HDU - 3538 A sample Hamilton path(最短哈密顿路径+状压dp)
  5. 区块链软件公司:区块链使用程序如何成为战胜商场应战的垫脚石
  6. 安装openstack时遇到的错误
  7. 一切都是骗局 Windows 8并不是很牛X
  8. Python带参数的装饰器
  9. Druid : 慢SQL统计与监控
  10. python画猫和老鼠_观察者模式(猫与老鼠的故事!)
  11. Java中的网络编程
  12. 蔬菜水果生鲜电商购物网站模板源码下载
  13. 【Android】局域网屏幕共享与反向控制功能的实现
  14. 文档下载道客巴巴豆丁网原创力文档代下载Word PPT文件下载
  15. 云优CMS火车头数据采集教程-自动采集发布教程
  16. matlab papr,PAPR问题的MATLAB程序
  17. spss modeler模型应用
  18. 【欧拉计划第 3 题】最大质因数 Largest prime factor
  19. CentOS各个版本支持周期
  20. 哈工大c语言ex6答案,哈工大C语言程序设计习题ex6.doc

热门文章

  1. [golang gin框架] 27.Gin 商城项目-购物车
  2. notepad++ 同时搜索多个关键字
  3. 永久免费的英文字体生成软件,例:
  4. stmdb和ldmia
  5. qlib平台实现可转债“双低”策略
  6. bootstrap~去除input选中时的蓝色边框线
  7. Excel工具类(详细版)
  8. java去除多余excel_java使用poi删除excel中的空行
  9. 公司被告,晋升受阻,为刷考评互拆台...这届FB员工太难了
  10. 安装程序无法自动安装 Virtual Machine Communication Interface Sockets (VSock) 驱动程序,必须手动安装此驱动程序