HBase基础知识

简介

HBase 是一个基于HDFS 的面向列的分布式数据库,属于非关系型数据库的一种。

HBase 本质上只有插入操作,更新和删除都是使用插入方式完成的,这是由其底层 HDFS 的流式访问特性(一次写入、多次读取)决定的。

HBase在更新时总会插入一个带时间戳的新行,而删除时则插入一个带有删除标记的新行。每次插入都有一个时间戳的标记,每次都是一个新的版本,Hbase会保留一定数据的版本(自行设置)。如果查询时提供时间戳则返回距离该时间最近的版本,否则返回离现在最近的版本。

一、 HBase体系结构

HBase采用Master/slaves 的主从服务器结构,由一个HMaste服务器和多个HRegion Server服务器组成,所有的服务器都通过Zoo Keeper协调并处理运行期间遇到的错误。

HMaster负责管理所有的HRegion Server,各HRegion Server负责存储许多HRegion,每一个HRegion是对HBase逻辑表的分块。

HBase体系结构

1. HRegion

HBase使用表存储数据,表由行和列组成。但是当表超过设定值大小时,Hbase会自动将表划分不同的区域,每个区域被称为HRegion。

  • HRegion是集群上分布式存储和负责均衡的最小单位,类似于HDFS中文件与文件块的概念。

  • 一个HRegion保存一个表中连续的数据,通过表名及主键来区分每一个HRegion。

  • 最开始一个表只有一个HRegion,随着HRegion增大,超出设定阈值,会分裂成两个大小基本相同的HRegion,称为HRegion分裂。

region分裂.png
  • 每个HRegion由HStore组成,HStore由两部分组成:Mem Store和Store File,用户写入的数据首先放入Mem Store,当Mem Store满了以后再刷入Store File。

  • Store File 是 HBase的最小存储单位,底层最终由HFile实现。HFile是键值对数据存储的格式,实质是HDFS的二进制文件。

2. HRegion Server

HRegion Server负责响应客户端IO请求,向HDFS中读写数据,一台机器上只运行一个HRegion Server。HRegion Server包含两个部分:HLog 和 HRegion。

  • HLog用于存储数据日志,实质是HDFS的Sequence File。到达HRegion的写操作首先追加到日志中,才被加入到内存中的Mem Store。

  • HLog 主要用于故障恢复,如果HRegion所在主机发生故障,那么所维护的HRegion会被重新分配至新的主机上,新的HRegion Server 在加载HRegion时,可通过Hlog恢复数据。

3. HMaster

HMaster主要任务是告诉每个HRegion Server需要维护哪些HRegion。在Hbase中可以启动多个HMaster,通过ZooKeeper的Master选举机制来保证系统中总会有一个HMaster在运行。

HMaster包括以下功能:

1. 管理用户对表的增改查操作

2. 管理HRegion的负责均衡,调整HRegion分布

3. 在HRegion分裂后,负责HRegion分配

4. 在HRegion Server停机后,负责失效HRegion Server上的HRegion迁移

4. zoo keeper

Zoo keeper 是存储HBase -ROOT-表和.META.表的位置,这是HBase中两张特殊的表。称为根数据表(-ROOT-)和元数据表(.META.)。
元数据表记录普通用户表的HRegion标识符信息,每个HRgion的标识符为:表名+开始主键+唯一ID
随着用户表的HRegion的分裂,.META.表的信息也会增加,并且还可能被分割为几个HRegion,此时可以用一个-ROOT-表来保存META的HRegion信息,而-ROOT-表是不能被分割的,也就是-ROOT-表只有一个HRegion。
那么客户端(Client)在访问用户数据前需要先访问Zoo Keeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据所在位置进行访问。

-ROOT-表和.META.表

二、 HBase数据模型

1. 数据模型

  1. 表(Table):是一种稀疏表(不存储数据为NULL的数据),表的索引是行关键字、列关键字、时间戳
  2. 行关键字(Row Key):行的主键,唯一标识一行数据,也称为行键。
    表中的行根据行键进行字典排序,所有对表的访问都要通过表的行键。
    在创建表时,行键不用也不能预先定义,而对表数据进行操作时必须指定行键,行键在添加数据时首次被确定。
  3. 列族(Column Family):行中的列被分为列族
    同一个列族的所有成员具有相同的列族前缀。例如[course:math]和[course:art]都是列族[course]的成员。
    一个表的列族必须在创建表时预先定义,列族名称不能包含ASCII控制字符(编号0~31+127)和冒号(:)。
  4. 列关键字(Column Key):也称列键。 格式为:[Family:qualifier]
    family 是列族名,用于表示列族前缀。qualifier是列修饰符,表示列族中的一个成员,列族成员可以在随后按需拓展。
  5. 存储单元(Cell): 在HBase中,值是作为一个单元保存在系统中的。
    要定位一个单元,需要用[行键+列键+时间戳] 3个要素。
  6. 时间戳(Timestamp):插入单元格时间,默认为单元格的版本号。

2. 概念图

在传统数据库中,只能通过表的主键和唯一字段定位到某一条数据。


传统数据库中成绩表.png

如上表所示:
主键为name,主要字段有name、grade、math、art。
由于主键唯一标识了一行记录,所以我们很容易按姓名查询某位同学的成绩。

那么思考以下几个问题:

  1. 如果新增一门课程,在不修改表结构的情况下,能保存成绩么?
  2. 如果有同学参加补考,怎么保存两次成绩。
  3. 如果同学只参加一门考试,其他课程都没有成绩。我们能保存只有成绩的课程来节省存储空间么?

HBase的数据模型就能完美解决以上问题。


HBase概览图-成绩表.png
  • 可以通过[行键+时间戳+列族]来访问具体的值(单元)。
  • 对表操作必须指定行键和列键,每次操作都会增加一条数据并会自动生成时间戳。从上到下倒序排列,不必由用户管理。
  • 每次只针对一个列键操作。且列修饰符可以为空。

eg. 在t4时刻,客户端添加[jason] 的[grade]为[2]。
类似操作为:先找到行键[jason],然后指定列键并赋值[grade:=2]。这里的列族修饰符可以为空。前面提到过列族修饰符可以由任意字符组成。


现在基于HBase回答前面的问题:

  1. 如果jason新增英语科目成绩,那么指定行键[jason],列键[source:english],以及值(英语成绩)即可。
  2. 如果jason 参加数学补考,那么直接指定行键[jason],列键[source:math],以及值(数学补考成绩)即可。
  3. 前面说过HBase是稀疏的存储设计。其实概览图中空白部分是不会实际被存储的。

3. 物理结构

HBase物理图-1.png
HBase物理图-2.png

如图所示:
HBase 就是这样一个基于列的映射数据库,他只能表示简单的键值映射关系。

4.HBase数据特点

  1. 数据类型: 只有简单的字符串类型。(传统SQL有多种数据类型)
  2. 数据操作:只有简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系。(传统SQL有多种连接操作)
  3. 存储模式:基于列的存储。每个列族由几个文件保存,不同列族的文件是分离的。(传统SQL是基于表格结构和行模式存储)
  4. 数据维护: 只是简单的插入了新数据,它的旧版本会保留(传统SQL是替换修改操作)
  5. 可伸缩: 分布式数据库。能够轻松的增加和减少硬件数量,并且对错误兼容性较高。(传统SQL需要中间层才能实现类似功能)

本文参考与《基于 Hadoop 与 Spark 的大数据开发实战》

微信关注.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

  • 目录一. HBaes介绍1.1 HBase简介1.2 HBase的角色1.2.1 HMaster1.2.2 HRe...
    Movle阅读 301评论 0 5
  • HBase工作原理学习 1 HBase简介 HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用...
    miss幸运阅读 759评论 0 11
  • 一、简介 Hbase:全名Hadoop DataBase,是一种开源的,可伸缩的,严格一致性(并非最终一致性)的分...
    菜鸟小玄阅读 2,362评论 0 12
  • I want to have somebody like you Like the gentle breeze t...
    Hellojourney阅读 800评论 0 0
  • 撒了盐也没有出来效果,哈哈,没有看到惊喜,只看到了惊奇!我的画丑出了想象!还好,我画了,不然连献丑的机会都没有! ...
    瞳瞳日中的微笑阅读 222评论 2 5