深入浅出 HBase 实战 | 青训营笔记

87 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第十天

HBase 是一种类似于数据库的存储层,也就是说 HBase 适用于结构化的存储。并且 HBase 是一种列式的分布式数据库。HBase 底层依旧依赖 HDFS 来作为其物理存储。 HBase隶属于hadoop生态系统,它参考了谷歌的BigTable建模,实现的编程语言为 Java, 建立在HDFS之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它仅能通过主键(row key)和主键的range来检索数据,主要用来存储非结构化和半结构化的松散数据。与hadoop一样,HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。HBase数据库中的表一般有这样的特点:

  • 大:一个表可以有上亿行,上百万列
  • 面向列: 面向列(族)的存储和权限控制,列(族)独立检索
  • 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏

体系架构:

Client的主要功能:

  • 使用HBase的RPC机制与HMaster和HRegionServer进行通信
  • 对于管理类操作,Client与HMaster进行RPC
  • 对于数据读写类操作,Client与HRegionServer进行RPC

Zookeeper功能:

  • 保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册
  • 实时监控Region server的上线和下线信息,并实时通知给Master
  • 存储所有Region的寻址入口和HBase的table元数据

HMaster功能:

  • 管理HRegionServer,实现其负载均衡
  • 管理和分配HRegion,比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上
  • 监控集群中所有HRegionServer的状态(通过Heartbeat和监听ZooKeeper中的状态)

HRegionServer功能:

  • Region server维护Master分配给它的region,处理对这些region的IO请求
  • Region server负责切分在运行过程中变得过大的region

数据模型:

  • Table: 与传统关系型数据库类似,HBase以表(Table)的方式组织数据,应用程序将数据存入HBase表中
  • Row: HBase表中的行通过 RowKey 进行唯一标识,不论是数字还是字符串,最终都会转换成字段数据进行存储;HBase表中的行是按RowKey字典顺序排列
  • Column Family: HBase表由行和列共同组织,同时引入列族的概念,它将一列或多列组织在一起,HBase的列必须属于某一个列族,在创建表时只需指定表名和至少一个列族
  • Cell: 行和列的交叉点称为单元格,单元格的内容就是列的值,以二进制形式存储,同时它是版本化的
  • version: 每个cell的值可保存数据的多个版本(到底支持几个版本可在建表时指定),按时间顺序倒序排列,时间戳是64位的整数,可在写入数据时赋值,也可由RegionServer自动赋值