分布式数据库HBase,它到底是怎么组成的?

原文链接:http://www.ibearzmblog.com/#/technology/info?id=3f432a2451f5f9cb9a14d6e756036b67

前言

大数据的核心问题无非就是存储和计算这两个。Hadoop中的HDFS解决了数据存储的问题,而HBase就是在HDFS上构建,因此Hbase既能解决大数据存储的问题,又能解决数据实时查询的问题。

是什么

HBase是一个高可靠、高性能、可伸缩的分布式存储系统,是一个NoSQL数据块,它同样包含行和列,不过从底层来看,跟关系型数据库比,本质的数据存储结果有着本质的差别。

特点

Hbase是通过RowKey(即是行键)来检索数据的,主要用于存储非结构化、板结构化数据,像图片、视频、视频这些非结构化数据,XML这些半结构化数据都可以用HBase来存储。Hbase的特性跟HDFS也类似,主要依靠横向扩展来提高自身的存储和计算能力。

下面是一些HBase的重要特性:

  • 容量大:单表可以支持百亿级的行、百万级的列。
  • 无模式:同一个表的不同行可以有不同列。
  • 面向列:支持列独立索引。
  • 稀疏性:表设计可以非常稀疏,当值为空的时候并不会占用存储空间。
  • 扩展性:底层依赖HDFS,HDFS怎么样它就怎么样。
  • 高可靠性:提供了副本机制,防止数据丢失。

HBase的组成

HBase的模型由四个部分组成:表、行键、列簇、单元格。

表是HBase作为分布式数据库的核心概念,跟传统的关系型数据库一样,HBase的表也是由行和列组成的,多个列可以组成列簇。

行键(RowKey)

可以等同于关系型数据库里的主键,HBase是按照RowKey进行排序的,所以需要设计良好的行键来提高查询性能。

列簇(ColumnFamily)

HBase的每个列都会归属于某个列簇,每个列簇里的所有成员都会有相同的前缀,例如上图bear:html、dog:blog.com和dog:view.com这三列,一共包含两个列簇,分别是bear和dog,列名由列簇前缀+修饰符组成。

列簇是表结构的一部分,在使用表前就需要提前定义好,而其中的列并不是必须的,可以在插入数据的时候生成。如果经常一起查询的多列建议都放在同一个列簇里,因为跨列簇查询也会影响查询效率。

单元格(Cell)

HBase中通过行键和列确定的一个存储单元成为单元格。每个单元格的内部都保存了同一份数据的多个版本,并且按时间戳倒叙排序,如下图:

时间戳(TimeStamp)可以在用户插入的时候赋值,或者让RegionServer自动赋值。

HBase的物理模型

在实际的物理存储上,HBase是按列分开存储的,而列则是按列簇进行分组,而一个列簇的数据都会被同一个Region进行管理(这里是指同一个列簇的数据由同一个Region管理,并不是指一个Region只负责一个列簇)。

Region是Hbase数据管理的基本单位,数据的移动、分裂等等都是以Region来进行处理。HBase表的行会按照Rowkey进行排序,而在表里的行会被分割成多个Region,如下图所示:

在初期数据不大的时候,默认只有一个Region,后面随着记录的疯狂式增长,Region就会分裂,不同的Region会被Master分发到不同的RegionServer上。

但是在HBase中,Region虽然是分布式存储的最小单元,但并不存储的最小单元。Region由一个或多个Store组成,每个Store保存一个Column Family,每个Store又由一个memStore和多个StoreFile组成,memStore存储在内存中,StoreFile则是在HDFS上,结构如下所示:

HBase的架构

HBase包含4个核心模块,分别是客户端(Client)、协调服务(Zookeeper)、主节点(HMaster)、从节点(HRegionServer)

客户端(Client)

Client是HBase系统的入口,可以通过Client来操作HBase。Client都是通过RPC调用来与HMaster和RegionServer通信。

Zookeeper

负责管理HMaster的选举,保证集群中只有一个HMaster是Active状态,实时监控HRegionServer状态并通知给HMaster。存储HBase的Schema和Table的元数据。

HMater

在HBase中可以启动多个HMaster,但是在正常情况下只有一个HMaster是对外提供服务的,而其他的HMaster则负责备用(一主多从结构),这些由zookeeper来控制。HMaster的主要作用如下:

  1. 管理用户对表的CRUD操作。
  2. 调整HRegion的分布,管理HRegionServer的负载均衡。
  3. HRegion分裂后,负责将新的HRegion分配到其他的HRegionServer上。
  4. 当某个HRegionServer失效后,负责迁移HRegion到正常的HRegionServer上。

HRegionServer

主要负责响应客户端的I/O请求。HRegionServer内部维护了一系列的HRegion对象,一个HRegion对象等于一个Region,每个HRegion对应多个HStore,每个HStore对应一个列簇,每个列簇就是一个集中的存储单元

总体架构如下:

结尾

HBase的总体结构介绍到这里,后面会更新它的部署方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22029.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络|思维导图|自顶向下方法|MindMaps资料分享

前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html?spm1001.2014.3001.5482这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支…

代码随想录算法训练营day2 | 977. 有序数组的平方,209. 长度最小的子数组

目录 977. 有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵 II 977. 有序数组的平方 977. 有序数组的平方 难度:easy 类型:双指针(相向指针) 思路: 暴力法是将每个数都平方后,再排序(快排)&#…

问题解决:idea克隆项目依赖无法解析

问题描述尝试解决方案 问题描述 从git远程仓库clone了一个springboot项目, 然后项目的pom.xml文件的依赖全部加载失败,全部是Project 某某某依赖 not found 的错误,几十条 代码就更不用看了,只要用到依赖,全部报错. 看着报错就头大 尝试解决方案 检查maven配置是否正确 检查是…

Tomcat 应用服务 WEB服务

简述: 中间件产品介绍 目前来说IBM的WebSphere,Oracle的Weblogic占据了市场上Java语言Web站点的部分份额,该两种软件由于无与伦比的性能及可靠性等优势被广泛应用于大型互联网公司的Web场景中,但是其高昂的价格也使得中小型互联…

跨端技术栈综合考察:深入剖析 UniApp、Flutter、Taro 和 React Native 的优势与限制

文章目录 📈UniApp⚡概念⚡优势⚡限制 📈Flutter⚡概念⚡优势⚡限制 📈Taro⚡概念⚡优势⚡限制 📈React Native⚡概念⚡优势⚡限制 📈跨端技术栈对比附录:「简历必备」前后端实战项目(推荐&…

mysql常用字符串函数

1. 计算字符串字符数 CHAR_LENGTH(str):返回字符总数 2. 计算字符串长度 LENGTH():使用​​utf8​​编码字符集时,一个汉字是三字节,一个数字或者字母算一字节; 3. 合并字符串函数 CONCAT(s1,s2,...):合…

Linux->初识计算机网络

目录 前言: 1 网络发展背景 2 协议 2.1 网络协议初识 2.2 协议分层 2.3 OSI、TCP/IP层状模型 2.4 协议和操作系统的关系 2.5 根据协议栈的通信 3 网络中的地址管理 前言: 本篇当中没有任何关于网络编程的讲解,全部是对网络的宏观理解…

MySQL的数据备份与还原--练习题

MySQLdump MySQLdump是MySQL提供的一个非常有用的数据库备份工具。MySQLdump命令执行时,可以将数据库备份成一个文本文件,该文件中实际上包含了多个CREATE 和 INSERT语句,使用这些语句可以重新创建表和插入数据。 看题: 第一题&a…

SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试【4】-O3 不支持 编译失败

gcc -O3 编译失败 结论:默认情况下SPEC CPU 2006 1.2 不支持 gcc -O3编译参数。

IDEA中右侧栏和底部栏不见了

IDEA中右侧栏和底部栏不见了 在开发中,IDEA的右侧栏目maven、database等栏目不见了 右侧栏中和底部没东西。 问题解决: View—>Appearance–>Tool Windows Bars 选中即可。 选中之后,出现

Ubuntu18.04 系统安装 Docker

1、首先更新软件源: sudo apt-get updatesudo apt-get upgrade 2、安装Docker: sudo apt install docker -y 3、查看安装的Docker apt list docker 4、查看docker 进程 ps -ef|grep docker 5、查看docker 版本有问题 6、开启Docker服务 systemctl…

【C语言】字符串函数

文章目录 一、求字符串长度strlen例子模拟实现 二、长度不受限制的字符串函数strcpy例子模拟实现 strcat例子模拟实现 strcmp例子模拟实现 三、长度受限制的字符串函数strncpy例子 strncat例子 strncmp例子 四、字符串查找strstr例子模拟实现 strtok例子 五、错误信息报告strer…