当前位置: 首页 > news >正文

分布式数据库HBase(林子雨慕课课程)

文章目录

    • 4. 分布式数据库HBase
      • 4.1 HBase简介
      • 4.2 HBase数据模型
      • 4.3 HBase的实现原理
      • 4.4 HBase运行机制
      • 4.5 HBase的应用方案
      • 4.6 HBase安装和编程实战

4. 分布式数据库HBase

4.1 HBase简介

  • HBase是BigTable的开源实现

image-20231008165253142

  • 对于网页搜索主要分为两个阶段

    • 1.建立整个网页索引:设计网页爬虫,爬取的网页存入BigTable中,在上面运行MapReduce

    • 2.搜索互联网网页

      image-20231008165520391

  • BigTable诞生?

    image-20231008165628566

  • Bigtable是在GFS的基础上实现的

    image-20231008165743978

  • 为什么分布式存储系统可以得到广泛的关注?

    • 它具有非常好的性能(可以支持PB级别的数据)
    • 它具有非常好的可扩展性(用集群去存储几千台服务器完成分布式存储)
  • HBase特点:高可能、高性能、面向列、可伸缩

    image-20231008170105044

  • HBase:通过水平扩展的方式,允许几千台服务器去存储海量文件

    image-20231008170221982

  • HBase和BigTable的底层技术对应关系

    image-20231008170317037

  • 为什么需要设计HBase这么一个数据库产品?

    • 虽然已经有了HDFS和MapReduce,但是Hadoop主要解决大规模数据离线批量处理,Hadoop无法满足大数据实时处理需求。

    • 随着这些年数据的大规模爆炸式增长,传统关系型数据库的扩展能力非常有限,即使通过设计主从复制方案或者分库的方式,仍然有两个缺陷,一个是不便利,另一个是效率非常低

  • 传统关系型数据库如何进行数据规模化扩展:

    • 设计主从复制方案,由主服务器负责接收写请求,若干从服务器都是主服务器的副本,从服务器接收外界的读请求,这样可以实现数据库在性能上的一定扩展

      image-20231008170854304

    • 做分库:对企业内部数据进行分库,将写负载分流

  • Hbase和传统关系型数据库有什么联系和区别?

    • 数据类型方面,传统关系数据库用的是非常经典的关系数据模型

    • 数据操作方面,在关系数据库中定了非常多的数据操作,查找,插入,删除等

    • 存储模式方面,关系数据库基于行模式存储,而对于HBase来讲是基于列存储

    • 在数据索引方面,关系数据库可以直接针对各个不同的列,构建非常复杂的索引

      image-20231008171505053

    • 数据维护方面,在关系数据库当中做一些数据更新操作的时候,实际上里面旧的值会被新的值覆盖掉;而HBase生成新的版本,旧的版本仍然存在,不会被替换

    • 可伸缩性方面,关系数据库是很难实现水平扩展的,最多可以实现纵向扩展

      image-20231008171935421

  • HBase访问接口

    image-20231008172100903

4.2 HBase数据模型

  • HBase是一个稀疏的多维度的排序的映射表:包含行键,列族,列限定符,时间戳

    image-20231008173124333

  • HBase特点

    image-20231008170221982

  • 列族的特性

    • 支持动态扩展:可以对列族进行增加或者减少

    • 保留旧的版本:执行数据更新操作的时候,会保留旧版本

    • HBase以表的形式组织数据,与关系型数据库的区别:关系型数据库会对其进行规范化处理,根据第一范式、第二范式、第三范式,将 表进行不断分解,最后需要对表进行多表连接;HBase不考虑冗余,牺牲空间去避免表连接操作带来的效率问题

  • 列限定符(列)

    • 实际过程中可以动态增加或者减少列
  • 单元格:具体存储数据的地方

  • 时间戳:新的版本会通过时间戳进行确定

  • 数据坐标的定位:必须通过四维:行键、列族、列限定符、时间戳来定位数据位置

    image-20231008174618703

  • HBase数据的概念视图

    • 列族名称:具体列限定符=“”
    • 在概念上HBase数据是稀疏的,因为很多单元格是空白的

    image-20231008175013832

  • HBase数据的物理视图:是按照列族进行存储的

    image-20231008191514263

  • 传统关系型数据库是行式存储,而HBase是列式存储

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 行式数据库和列式数据库示意图

    image-20231008192303431

  • 面向行的存储有什么优势和缺点

    image-20231008192354813

  • 列式存储的优点

    • 列式存储:按照一个列去存储,可以带来很高的数据压缩率,适用于以分析型应用为主的场景
    • 行式存储:不可能达到很高的数据压缩率,适合事务型操作比较多的场景

4.3 HBase的实现原理

  • HBase的功能组件:Master服务器、库函数、Reigion服务器

    • 库函数:链接每个客户端

    • Master服务器:充当管家作用

      image-20231008193013952

    • Region服务器:负责存储不同的Region

      • 客户端在获取Region位置信息之后,直接和Region服务器进行打交道

        image-20231008193213286

  • HBase的表和Region的关系

    • 初始化的时候将一个HBase表划分为多个Region,随着表的增大,Region规模增加,会分裂成多个新的Region,分裂时只需要修改指向信息,是非常快速的

      image-20231008193440440

      image-20231008193646685

  • Region到底被存到哪里去了?

    image-20231008193924333

  • HBase的三层结构

    • Root表在一个Region机器上,存储的元数据信息,即META表的位置

    • META表存储的是用户数据存储的位置

    • Root表的地址是写死在Zookeeper中的

      为了加速寻址,客户端会缓存位置信息,但同时需要解决缓存失效问题,它会先通过缓存查找数据,若找不到数据,则判定缓存失效,需要重新进行三级寻址

    image-20231008194400631

    • 三层结构中各层次的名称和作用

      image-20231008194440040

    • Region的定位

      image-20231008194653162

      image-20231008194807033

4.4 HBase运行机制

  • HBase的系统架构

    image-20231008195308851

    • 客户端:访问HBase的接口,为了加快访问速度,会进行位置地址的缓存

    • Zookeeper服务器:实现协同管理服务,其被大量用于分布式系统,提供配置维护,域名服务,分布式同步服务等,在HBase中,其主要提供管家功能,维护和管理整个HBase集群

      image-20231008195632529

    • Master服务器(主服务器):负责对HBase的表的增删改查;负责不同Region服务器的负载均衡;负责调整分裂、合并后Region的分布;负责重新分配故障、失效的Region服务器,也要借助Master来进行重新分配

      image-20231008195953264

    • Region服务器:负责用户数据的存储和管理,其负责向HDFS文件系统中读写数据

      • Region服务器集群由多个Region服务器构成,每个Region服务器中有多个组件
      • 若干个Region共用一个HLog文件
      • 每个Region中的每个列族会单独构成一个Store进行存储:会先存储到MemStore缓存中,缓存满了在存储到StoreFile文件中
      • StoreFile是HBase的表现形式,它在底层是借助HDFS存储的,其在HDFS中以HFile的格式存储

      image-20231008200103059

  • 用户读写数据过程

    • 写入数据

      • 首先将数据写入MemStore缓存区

      • 为了保存数据不丢失,会在写入Memstore前,会先写入HLog日志,当HLog数据写入到磁盘之后,才允许返回客户端

        image-20231008200814208

    • 读取数据

      • 首先用户也会先访问MemStore,因为最新写入的数据会存储于MemStore中

      • 若MemStore查找不到,会到磁盘的StoreFile中去找相关数据

        image-20231008200954154

  • 缓存刷新过程

    image-20231008201225601

  • StoreFile文件的合并

    • 刷写可能导致多个StoreFile文件,遍历StoreFile文件找数据,文件越多会影响查找速度,因此将多个StoreFile文件合并为一个大的StoreFile文件

      image-20231008201418386

  • StoreFile的分裂

    • StoreFile的不断合并可能会导致StoreFile的文件越来越大,当合并的StoreFile越大的时候,就会引发分裂操作

      image-20231008201635156

  • HLog的工作原理

    • HBase的底层是廉价的低端机,因此需要通过日志的发生来恢复故障

      image-20231008201957061

    • HBase为每个Region服务器都配置了公共的HLog

      image-20231008202220670

    • 故障恢复

      • Zookeeper来监视整个集群,会通知Master出问题的服务器,需要将故障服务器的内容迁移
      • Master会将故障服务器的HLog文件取出,包含故障服务器的各个Region对象以及日志记录
      • 然后对HLog的日志记录拆解为不同的Region的日志记录(因为所有的Region的日志都记录在HLog中)
      • 最后将这些Region分配到其他可用的Region服务器上去
    • 为何不每个Region设置单独的HLog文件

      • 因为这样对于每个Region的更新操作,需要写入不同的HLog文件,是非常耗时的,而且集群出故障的时间远少于正常运行的时间
      • 所有公共的HLog文件的可以大大提升写入性能

4.5 HBase的应用方案

  • HBase在实际应用中的性能优化方法

    • 若想把时间靠近的数据存在一起:

      image-20231008203531605

    • 提升读写性能:

      image-20231008203626114

    • 节省存储空间

      image-20231008203715218

    • 将到达时间限制的一些数据清楚,即使它没有到达版本最大数

      image-20231008203954303

  • HBase如何检测性能

    • 可以通过以下几种工具:Master-status、Ganglia、OpenTSDB、Ambari

      image-20231008203954303

      • Master-staus

        image-20231008204139709

      • Ganglia

        image-20231008204203630

      • OpenTSDB

        image-20231008204236174

      • Ambari

        image-20231008204303155

  • SQL语句查询HBase上相关数据

    • SQL易于使用,大部分人对HBase比较陌生,但是对SQL比较熟悉;

    • HBase原生代码查询数据编写代码较多,SQL是非过程语言,很多系统的底层会帮它生成相关操作

      image-20231008204639556

    • Hive和Phoenix

      image-20231008204727270

  • 构建HBase二级索引

    image-20231008204809345

    • 原生的HBase不支持对于各个列构建相关的索引,默认支持对rowkey行键进行索引

      image-20231008204925074

    • HBase0.92版本引入新特性:Coprocessor,可以支持二级索引

      image-20231008205142499

    • Coprocessor如何构建二级索引

      • 其提供两个实现:endpoint和observer

      • Endpoint相当于关系型数据库的存储过程,observer相当于触发器

      • 每次往HBase表中插入数据时,observer会监测到,会将插入的数据同步写到索引表

        image-20231008205440095

    • 此时在HBase中就存在了主表和索引表

      • 索引表不是HBase内部自身的,是由其他产品帮其构建的二级索引,是通过Coprocessor格外开发的程序,对不同的其他列进行索引

      image-20231008205536489

    • Coprocessor构建二级索引的优点和缺点

      • 优点:非侵入性,引擎构建在HBase之上,既没有对HBase进行任何改动,也不需要上层应用做任何妥协
      • 缺点:每插入一条数据需要向索引表插入数据,即耗时是双倍的,对HBase的集群压力也是双倍的
  • HBase的应用方案

    image-20231008210013892

    • Redis的方案:将索引写入到Redis的缓存数据库中,定期的把索引更新到HBase底层数据库,可以避免频繁更新磁盘索引表的问题

      image-20231008210340743

    • Solr+HBase:Solr服务器构建其他列和行键之间的对应关系,输入其他列的某一个值,可以快速找到这个列对应的行键,通过行键快速找到HBase记录

      image-20231008210613264

4.6 HBase安装和编程实战

见:HBase2.5.4安装和编程实践指南_厦大数据库实验室博客 (xmu.edu.cn)

相关文章:

分布式数据库HBase(林子雨慕课课程)

文章目录 4. 分布式数据库HBase4.1 HBase简介4.2 HBase数据模型4.3 HBase的实现原理4.4 HBase运行机制4.5 HBase的应用方案4.6 HBase安装和编程实战 4. 分布式数据库HBase 4.1 HBase简介 HBase是BigTable的开源实现 对于网页搜索主要分为两个阶段 1.建立整个网页索引&#xf…...

矩阵求导的本质与分子布局、分母布局的本质

大佬讲解的实在太吊了。 就拿大佬的总结说明一下: 矩阵求导结果,无非就是分子的转置、向量化,分母的转置、向量化,它们的各种组合而已。 1、分子布局的本质:分子是标量、列向量、矩阵向量化后的列向量;分母…...

【广州华锐互动】VR建筑施工事故体验:提高工人安全意识和责任感

VR建筑施工事故体验的意义在于通过模拟真实场景和情况,帮助人们更好地理解建筑施工中的安全问题,并提供一种安全、有效的方式来学习和掌握安全技能。 建筑施工是一项高风险的工作,涉及各种复杂的工作环境和操作过程。在现实中,建筑…...

HSRP热备份路由器协议的解析和配置

HSRP的解析 个人简介 HSRP hot standby router protocol 热备份路由协议(思科私有协议) HSRP v1 version 1 HSRP v2 version 2 虚拟一个HSRP虚拟IP地址 192.168.1.1 开启HSRP的抢占功能 通过其他参数 人为调整谁是主 谁是从 ! 查…...

kotlin实现ArrayDeque

Deque双端队列,一直在使用,却从未了解过源码。 内部逻辑其实很简单 可扩容数组循环队列,循环栈扩容倍数1.5,sizesize(size shr 1)只从两端存取元素 fun main() {val deque MyArrayDeque()repeat(16) {deque.addLast(it)}while …...

java时间格式化

1,CST时间格式化,这个一般是返回值的类型为 Date 类型,如果不做处理,返给前端的就是时间戳,当然也可以更改返回值类型为 String,这样就不用处理了。方法如下: /*** 格式化时间* param date Thu…...

ArduPilot开源飞控之AP_Baro_SITL

ArduPilot开源飞控之AP_Baro_SITL 1. 源由2. back-end抽象类3. 方法实现3.1 AP_Baro_SITL3.2 _timer3.3 temperature_adjustment3.4 wind_pressure_correction3.5 update 4. 参考资料 1. 源由 鉴于ArduPilot开源飞控之AP_Baro中涉及Sensor Driver有以下总线类型: …...

基于Java的病人跟踪治疗管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...

RCD吸收电路的工作原理及参数计算方法详解

在电子电力技术和自动化控制领域内,RCD吸收电路非常重要,它的作用是吸收瞬间过电压和过电路免受电压波动的影响,因此被广泛应用在各种设备及系统中,今天凡亿将带领小伙伴们来了解下RCD吸收电路的工作原理及计算方法。 1、RCD吸收电…...

leetcode做题笔记169. 多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出:3 示例 …...

FATFS f_printf 如何支持写入浮点数据。

参考原子和网上的移植最新的fatfs系统后,挂载打开文件始终返回13错误代码,在自己的项目中移植最新的fatfs0.15版本解决问题,使用f_printf能成功进行浮点数据写入了 参考的文章如下: https://zhuanlan.zhihu.com/p/444427537 问题描述 在使用fatfs的f_printf向文件.csv中写入…...

postman忘记密码提交没响应

现象:通过客户端进到账户页面一直无响应,可copy the url 到浏览器进入页面,使用浏览器提交几次还是没响应。 实测有用方法: 1、通过手机进入官网 https://www.getpostman.com ,找到忘记密码入口。 2、多提交几次后&…...

初学vue,想自己找个中长期小型项目练练手,应该做什么?

前言 可以试着做一两个完整的后台管理项目后再去做其他的,下面推荐一些github上的vue后台管理的项目,可以自己选择性的练一下手 Vue2 1、iview-admin Star: 16.4k 基于 iview组件库开发的一款后台管理系统框架,提供了一系列的强大组件和基…...

【牛客面试必刷TOP101】Day11.BM63 跳台阶和 BM67 不同路径的数目(一)

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:牛客面试必刷TOP101 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&…...

[NOIP 2022] 建造军营 题解

题目 P1 边双缩点 观察样例二,可以发现边双内的边可选可不选。由此考虑边双缩点,Tarjan 找桥即可,缩点后变成一棵树。 P2 设计状态 用最终合法答案形态截这颗树,设计 f u f_u fu​ 表示 u u u 子树内非空,且子树…...

射频识别技术(RFID)在智能制造模具管理中的应用

背景介绍 模具是工业生产的核心装备,被誉为“工业之母”,广泛应用于机械、汽车、轻工、电子、化工、冶金、建材等各个行业,是制造加工企业的重要资产,然而,传统的人工纸质记录方式已无法满足模具管理的需求&#xff0…...

奖品定制经营商城小程序的作用是什么

奖品是激励人员团体很好的方式,也是荣誉象征,奖牌、奖杯、高端礼盒等,同时市场中团体非常多,其需求也是很多,尤其定制方面,就更是不用说。 对奖品定制企业来说,除了线下门店获客经营外&#xf…...

深度学习常用脚本总结

👨‍💻个人简介: 深度学习图像领域工作者 🎉工作总结链接:https://blog.csdn.net/qq_28949847/article/details/128552785 链接中主要是个人工作的总结,每个链接都是一些常用demo&#xff0c…...

hive数据表创建

目录 分隔符 分区表 二级分区 分桶表 外部表 分隔符 CREATE TABLE emp( userid bigint, emp_name array<string>, emp_date map<string,date>, other_info struct<deptname:string, gender:string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY \t COL…...

查看本机Arp缓存,以及清除arp缓存

查看Arp缓存目录 Windows 系统使用 winR&#xff0c;输入cmd 在命令窗口输入 arp -a 删除Arp缓存目录 在命令窗口输入 arp -d * 查看主机路由表...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...