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

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

前言

大数据的核心问题无非就是存储和计算这两个。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的总体结构介绍到这里,后面会更新它的部署方式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

echarts实现渐变折线图并添加点击事件

折线图点击事件代码: let myChart = this.$echarts.init(document.getElementById(trendBoxECharts))myChart.getZr().on(click, params => {console.log(params)let pointInPixel = [params.offsetX, params.offsetY]if (myChart.containPixel(grid, pointInPixel)) {//点…

基于FME二开产品:NewGIS integration介绍

目录 前言 一、模板上传 二、模板在线运行 1.模板参数解析 2.模板运行 三、成果管理 总结 前言 爆肝两个月,我和我的团队终于打造出了一款能完美适配所有FME模板的在线模板管理平台,目前支持FME2021版本的所有模板的在线运行、管理。整体技术框架…

hibernate入门,springboot整合hibernate

Mybatis和Hibernate是我们常用的两大ORM框架,这篇文章主要介绍hibernate的使用,如何通过springboot整合hibernate,实现简单的crud功能。 添加依赖 首先,需要创建一个springboot项目,这里就取名为hibernate。项目创建完…

Stable Diffusion 丝滑无闪烁AI动画 Temporalkit+Ebsynth+Controlnet

早期的EbSynth制作的AI视频闪烁能闪瞎人的双眼,可以通过【temporalkit+ebsynth+controlnet】让视频变得丝滑不闪烁。 文章目录 插件准备丝滑视频制作插件准备 下载安装 EbSynth官网,这里需要输入email地址。 下载压缩包解压缩到任意位置,这里我放到了ebsynth_utility下。 …

.Net5 mvc项目UseBrowserLink插件功能失效的原因

前期基于.Net Framework创建的Web项目,使用了BrowserLink插件协助前端开发,功能一直都比较稳定,后来项目迁到.Net5 ,发现BrowserLink 已经失去了从浏览器定位到项目源代码的功能,希望在后面的版本还能继续支持此版本&a…

layui的基本使用-Helloworld 三把斧的一把斧头的熟练起来

该笔记记录如何使用layui的模块化方法。 访问layui官网 Layui - 极简模块化前端 UI 组件库下载官网的layui压缩包文件,解压到本地文件夹,文件结构如下: vscode创建项目; 位置 测试写了三个文件夹,才测试出来bug 坑所在…

【JavaScript 03】语句 变量 变量提升 标识符 注释 区块 作用域 条件语句 循环语句 break continue 标签

JS 语句变量变量提升标识符注释区块条件语句ifif...elseswitch三元运算符 ?: 循环语句whilefordo...whilebreak语句 and continue语句标签 语句 JS程序的执行单位是行(line) **语句(statement)**是为了完成特定任务而进行的操作…

后端查询出的数据库数字自动补零和不补零

select CAST(YTD_CHANGE*100 as decimal(18,1)), round(YTD_CHANGE*100,1) from RP where data_date 20211231补零 round(PYTD_CHANGE_PER*100,1)不补零 CAST(PYTD_CHANGE_PER*100 as decimal(18,1))

基于ZYNQ阵列涡流检测系统硬件设计(一)

为实现阵列涡流检测系统总体功能,需研制一套多通道信号采集硬件系统,以搭配 软件编程实现分时激励和分时采集。基于以上要求,本章介绍了阵列涡流检测系统的硬 件模块设计。 3.1 阵列涡流检测系统总体设计 阵列涡流检测系统需要利用 DA …

【C++进阶之路】list的基本使用和模拟实现

文章目录 初步认识①定义②底层原理③迭代器的分类 一、基本使用1.插入结点元素2.删除结点元素3.合并两个有序链表4.将一条链表的某一部分转移到另一条链表5.对链表排序并去重6.vector与list排序的比较 二、模拟实现①要点说明②基本框架③迭代器构造函数- -*->list里的迭代…

ChatGLM-6B+LangChain实战

目标:原始使用ChatGLM-6B可接受的文字长度有限,打算结合LangChain实现长文本生成摘要. 方法: step1:自定义一个GLM继承LangChain中的langchain.llms.base.LLM,load自己的模型. step2:使用LangChain的mapred…

vue 集成tinymce2实现图片,视频以及文件的上传

vue 集成tinymce2实现图片,视频以及文件的上传 1. 安装插件 (1)安装tinymce npm install tinymce -S (2)安装tinymce-vue npm install tinymce/tinymce-vue3.0.1 -S 2. 复制静态文件到public目录 资源下载路径&…

数据分析的iloc和loc功能

大家好,在处理大型数据集时,使用有效的数据操作和提取技术是必要的。Pandas数据分析库提供了强大的工具,用于处理结构化数据,包括使用iloc和loc函数访问和修改DataFrame元素的能力。在本文中,我们将探讨iloc和loc之间的…

JAVA集成国密SM2

JAVA集成国密SM2加解密 一、pom配置二、代码集成2.1、目录结构2.2、源码2.3、测试 三、相关链接 国密算法概述:https://blog.csdn.net/qq_38254635/article/details/131801527 SM2椭圆曲线公钥密码算法 为非对称加密,基于ECC。该算法已公开。由于该算法…

rabbitMQ杂记

消息队列应用场景 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 削锋等问题实现高性能,高可用,可伸缩和最终一致性: 解耦: 异步: 削峰: 常…

基于单片机的教室智能照明台灯控制系统的设计与实现

功能介绍 以51单片机作为主控系统;LCD1602液晶显示当前时间、年月日、时分秒、前教室人数;2路红外探头用来感应当前教室进出人数;按键可以设置当前时间、自动手动模式、开启和关闭教室灯光时间;在手动模式下,可以通过按…

Spring IoC及DI依赖注入

Spring 1.Spring的含义: Spring 可从狭义与广义两个角度看待 狭义的 Spring 是指 Spring 框架(Spring Fremework) 广义的 Spring 是指 Spring 生态体系 2.狭义的 Spring 框架 Spring 框架是企业开发复杂性的一站式解决方案 Spring 框架的核心是 IoC 容器和 AO…

透视表可视化简单案例

import pandas as pd import numpy as np import os basepath/Users/kangyongqing/Documents/kangyq/202307/标准版学期制C2/pathos.path.join(basepath,02freetime.csv) dtpd.read_csv(path,dtype{shifen:object}) print(dt.head()) import matplotlib.pyplot as pltfor i in …

Python探索金融数据进行时间序列分析和预测

大家好,时间序列分析是一种基于历史数据和趋势分析进行预测的统计技术。它在金融和经济领域非常普遍,因为它可以准确预测趋势并做出明智的决策。本文将使用Python来探索经济和金融数据,执行统计分析,并创建时间序列预测。 我们将…

55. 跳跃游戏

题目链接:力扣 解题思路: 贪心,因为题目只需要判断能够到达最后一个下标,所以可以从前往后遍历,使用maxEnd保存已经遍历过的位置能够跳跃达到的最大下标,如果maxEnd大于等于nums.length-1,则返回…