分布式数据库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)

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

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

相关文章

如何在 Android 中完成一个 APT 项目的开发?

前言 APT(Annotation Processing Tool)即注解处理器,是一种处理注解的工具。 APT在编译时期扫描处理源代码中的注解,开发中可以根据注解,利用APT自动生成Java代码,减少冗余的代码和手动的代码输入过程,提升了编码效率…

Gralloc ION DMABUF in Camera Display

目录 Background knowledge Introduction ia pa va and memory addressing Memory Addressing Page Frame Management Memory area management DMA IOVA and IOMMU Introduce DMABUF What is DMABUF DMABUF 关键概念 DMABUF APIS –The Exporter DMABUF APIS –The…

上海亚商投顾:沪指探底回升 华为汽车概念股集体大涨

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日探底回升,早盘一度集体跌超1%,随后震荡回暖,深成指、创业板指…

LeetCode二叉树OJ

目录 剑指 Offer 55 - I. 二叉树的深度 - 力扣(LeetCode) 965. 单值二叉树 - 力扣(LeetCode) 100. 相同的树 - 力扣(LeetCode) 101. 对称二叉树 - 力扣(LeetCode) 二叉树遍历_牛客题…

TensorFlow学习:使用官方模型进行图像分类、使用自己的数据对模型进行微调

前言 上一篇文章 TensorFlow案例学习:对服装图像进行分类 中我们跟随官方文档学习了如何进行预处理数据、构建模型、训练模型等。但是对于像我这样的业余玩家来说训练一个模型是非常困难的。所以为什么我们不站在巨人的肩膀上,使用已经训练好了的成熟模…

VIT(Vision Transformer)学习-模型理解(一)

VIT (Vision Transformer) 模型论文代码(源码)从零详细解读,看不懂来打我_哔哩哔哩_bilibili VIT模型架构图 1.图片切分为patch 2. patch转化为embedding 1)将patch展平为一维长度 2)token embedding:将拉平之后的序列映射…

【ARM AMBA5 CHI 入门 12.1 -- CHI 链路层详细介绍 】

文章目录 CHI 版本介绍1.1 CHI 链路层介绍1.1.1 Flit 切片介绍1.1.2 link layer credit(L-Credit)机制1.1.3 Channel1.1.4 Port1.1. RN Node 接口定义1.1.6 SN Node 接口定义1.2 Channel interface signals1.2.1 Request, REQ, channel1.2.2 Response, RSP, channel1.2.3 Snoop…

如何找到新媒体矩阵中存在的问题?

随着数字媒体的发展,企业的新媒体矩阵已成为品牌推广和营销的重要手段之一。 然而,很多企业在搭建新媒体矩阵的过程中,往往会忽略一些问题,导致矩阵发展存在潜在风险,影响整个矩阵运营效果。 因此,找到目前…

二维离散傅里叶变换的实现

二维离散傅里叶变换的实现 1.使用Python包实现1.1 fftshift在numpy中的实现1.2 平移后的幅度谱 2.使用c实现之12.1 FFTW库安装2.2 结果比较 3.使用c实现之2参考文献 1.使用Python包实现 import numpy as np import matplotlib.pyplot as plt anp.array([0, 2, 4, 1,6, 1, 3, …

澳大利亚教育部宣布ChatGPT将被允许在澳学校使用!

教育部长最近宣布,从 2024 年起,包括 ChatGPT 在内的人工智能将被允许在所有澳大利亚学校使用。 (图片来源:卫报) 而早些时候,澳洲各高校就已经在寻找与Chatgpt之间的平衡了。 之前,悉尼大学就…

leetCode 1035.不相交的线 动态规划 + 滚动数组 (最长公共子序列)

1035. 不相交的线 - 力扣(LeetCode) 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足: nums1[i] nums2[j]…

蓝桥杯每日一题20233.10.10

题目描述 回文日期 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题,我们最先想到的是暴力解法,将每一种情况经行循环查找,在查找的过程中记录下答案,回文日期就是字符串判断回文,ABABBABA型回文日期可以将回文经行特判…

openGauss学习笔记-96 openGauss 数据库管理-访问外部数据库-file_fdw

文章目录 openGauss学习笔记-96 openGauss 数据库管理-访问外部数据库-file_fdw96.1 使用file_fdw96.2 注意事项 openGauss学习笔记-96 openGauss 数据库管理-访问外部数据库-file_fdw openGauss的fdw实现的功能是各个openGauss数据库及远程服务器(包括数据库、文件…

沪深300期权一个点多少钱?

经中国证监会批准,深圳证券交易所于2019年12月23日上市嘉实沪深300ETF期权合约品种。该产品是以沪深300为标的物的嘉实沪深300ETF交易型指数基金为标的衍生的标准化合约,下文介绍沪深300期权一个点多少钱?本文来自:期权酱 一、沪深300期权涨…

PDF编辑和OCR文字识别工具ABBYY FineReader PDF

ABBYY FineReader PDF是一款专业的OCR文字识别和PDF编辑工具,可以帮助用户更好地处理和管理PDF文档。以下是ABBYY FineReader PDF的一些特点: 1. 文字识别精准:ABBYY FineReader PDF具有强大的OCR文字识别功能,可以将PDF中的文字…

【广州华锐互动】灭火器使用VR教学系统应用于高校消防演练有什么好处?

在科技发展的大潮中,虚拟现实(VR)技术以其独特的沉浸式体验赢得了各个领域的青睐,其中包括教育和培训。在高校消防演练中,VR也成为了一种新的消防教育方式。 由广州华锐互动开发的VR消防演练系统,就包含了校…

神经网络(MLP多层感知器)

分类 神经网络可以分为多种不同的类型,下面列举一些常见的神经网络类型: 前馈神经网络(Feedforward Neural Network):前馈神经网络是最基本的神经网络类型,也是深度学习中最常见的神经网络类型。它由若干个…

【工具软件】mediamtx——网页、vue3项目中播放 rtsp 视频流(支持265转码)

声明 本文只做 mediamtx 的使用实操,请务必参考下面的博客,,我也参考下面的大佬博客,感谢唯一602的无私分享: 在web页面中直接播放rtsp视频流,重点推荐:mediamtx,不仅仅是rtsp mediamtx 介绍 …

C++ 与基本数据类型:整型、布尔型与字符型

文章目录 参考描述数据类型基本数据类型与复合数据类型静态数据类型 整形数据类型有符号整型数据类型无符号整型数据类型符号位 最少内存空间概念确定大小sizeof 运算符 进制C 中的不同进制数值表示cout 与进制转化影响范围二进制 后缀字面量整型字面量的默认数据类型主动权整型…

代码随想录算法训练营第六十天 | 单调栈 part 1 | 739. 每日温度、496.下一个更大元素 I

目录 739. 每日温度思路代码 496.下一个更大元素 I思路代码 739. 每日温度 Leetcode 思路 维持一个单调递增的栈,向栈逐一pushtemperatures里的index。 如果当前遍历的元素大于栈顶元素,这意味着 栈顶元素的 右边的最大的元素就是 当前遍历的元素&…