hbase命名空间 建表指定_HBase原理 | HBase内部探险

文章首先回顾 HBase 的数据模型和数据层级结构,对数据的每个层级的作用和构架均进行了详细阐述;随后介绍了数据写入和读取的详细流程;最后介绍老版本到新版本 Region 查找的演进。

一.数据模型

1.重要概念回顾

  • Namespace(表命名空间):将多个表分到一个组进行统一管理。

  • Table(表):一个表由一个或者多个列族组成;数据属性比如:超时时间(TTL),压缩算法(COMPRESSION)等,都在列族的定义中定义;定义完列族后表是空的,只有添加了行,表才有数据。

  • Row(行):一个行包含了多个列,这些列通过列族来分类;行中的数据所属列族只能从该表所定义的列族中选取;由于 HBase 是一个列式数据库,所以一个行中的数据可以分布在不同的服务器上。

  • Column Family(列族):列族是多个列的集合,HBase 会尽量把同一个列族的列放到同一个服务器上,这样可以提高存取性能,并且可以批量管理有关联的一堆列;所有的数据属性都是定义在列族上;在 HBase 中,建表定义的不是列,而是列族。

  • Column Qualifier(列):多个列组成一个行,列族和列经常用 Column Family: Column Qualifier 来一起表示,列是可以随意定义的,一个行中的列不限名字、不限数量。

  • Cell(单元格):一个列中可以存储多个版本的数据,而每个版本就称为一个单元格(Cell),所以在 HBase 中的单元格跟传统关系型数据库的单元格概念不一样;HBase 中的数据细粒度比传统数据结构更细一级,同一个位置的数据还细分成多个版本。

  • Timestamp(时间戳/版本号):既可以把它称为是时间戳,也可以称为是版本号,因为它是用来标定同一个列中多个单元格的版本号的。不指定版本号的时候,系统会自动采用当前的时间戳来作为版本号;当手动定义了一个数字来当作版本号的时候,这个 Timestamp 就真的是只有版本号的意义了。

2.几个小问题

HBase是否支持表关联?

官方给出的答案是干脆的,那就是“不支持”。如果想实现数据之间的关联,就必须自己去实现了,这是挑选 NoSQL 数据库必须付出的代价。

HBase 是否支持 ACID?

ACID 就是 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)的首字母缩写,ACID 是事务正确执行的保证,HBase 部分支持 了 ACID。

表命名空间有什么用?

表命名空间主要是用来对表分组,那么对表分组有什么用?命名空间可以填补 HBase 无法在一个实例上分库的缺憾,通过命名空间我们可以像关系型数据库一样将表分组,对于不同的组进行不同的环境设定,比如配额管理、安全管理等。

HBase 中有两个保留表空间是预先定义好的:

  • hbase:系统表空间,用于组织 HBase 内部表;

  • default:那些没有定义表空间的表都被自动分配到这个表空间下。

二.HBase 的存储数据方式

1.架构回顾

一个 HBase 集群由一个 Master(也可以把两个 Master 做成 HighAvailable)和多个 RegionServer 组成。

  • Master:负责启动的时候分配 Region 到具体的 RegionServer,执行各种管理操作,比如 Region 的分割和合并。HBase 中的 Master 的角色功能比其他类型集群弱很多,HBase 的 Master 很特别,因为数据的读取和写入都跟它没什么关系,它挂了业务系统照样运行。当然 Master 也不能宕机太久,有很多必要的操作,比如创建表、修改列族配置,以及更重要的分割和合并都需要它的操作。

  • RegionServer:RegionServer 上有一个或者多个 Region,我们读写的数据就存储在 Region 上。如果你的 HBase 是基于 HDFS 的(单机 HBase 可基于本地磁盘),那么 Region 所有数据存取操作都是调用了 HDFS 的客户端接口来实现的。

  • Region:表的一部分数据,HBase 是一个会自动分片的数据库,一个 Region 就相当于关系型数据库中分区表的一个分区,或者 MongoDB 的一个分片。

  • HDFS:HBase 并不直接跟服务器的硬盘交互,而是跟 HDFS 交互,所以 HDFS 是真正承载数据的载体。

  • ZooKeeper:ZooKeeper 在 HBase 中的比 Master 更重要,把 Master 关掉业务系统照样跑,能读能写;但是把 ZooKeeper 关掉,就不能读取数据了,因为读取数据所需要的元数据表 hbase:meata 的位置存储在 ZooKeeper 上。

2466d3e05dc43e53648bf0327c7dfc84.png
HBase 的宏观架构

2.RegionServer 内部架构

一个 RegionServer 包含有:

  • 一个 WAL:预写日志,WAL 是 Write-Ahead Log 的缩写,就是:预先写入。当操作到达 Region 的时候,HBase 先把操作写到 WAL 里面去,HBase

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值