IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 3 HBase架构 -> 正文阅读

[大数据]3 HBase架构

HBase架构

架构图

img

HBase有三个主要组成部分:客户端库,主服务器和区域服务器。区域服务器可以按要求添加或删降架构细解

架构解析

img

Client

  • 客户端负责发送请求到数据库
  • 客户端连接的方式有很多种
    • hbase shell
    • 类JDBC
  • 发送的请求主要包括
    • DDL:数据库定义语言(表的建立,删除,添加删除列族,控制版本)。
    • DML:数据库操作语言(增删改)
    • DQL:数据库查询语言(查询–全表扫描–基于主键–基于过滤器)
  • client维护着一些cache来加快对hbase的访问,比如regione的位置信息。

Zookeeper

  • 保证任何时候,集群中只有一个master
  • 存贮所有Region的寻址入口,存储所有的的元数据信息。
  • 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master
  • 存储Hbase的schema,包括有哪些table,每个table有哪些column family

HMaster

  • HBase集群的主节点,HMastert也可以实现高可用(active–standby)。
    • 通过Zookeeper来维护主副节点的切换
  • 为Region server分配region
  • 负责region server的负载均衡
  • 管理用户对table的结构创建,删除,修改(ddl)操作。
    • 表的元数据信息–》Zookeeper上面
    • 表的数据–》HRegionServer上
  • 当HRegionServer下线的时候,HMaster会将当前HRegionServer上的Region转移到其他的HRegionServer

HRegionServer

  • Region server属于HBase具体数据的管理者
  • Region server维护Master分配给它的region,处理对这些region的IO请求
  • 会实时的和Haster保持心跳,汇报当前节点的信息
  • 当接收到Hmaster命令创建表的时候,分配一个Region对应一张表
  • Region server负责切分在运行过程中变得过大的region
  • 当客户端发送DML和DQL操作的时候,HRegionServer负责和客户端建立连接
  • 当意外关闭的时候,当前节点的Region会被其他HRegionServer管理,一个节点只有一个HRegionServer

img

HRegion

  • HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的HRegion server上。
  • HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据

img

  • 每个表一开始只有一个region,一个Region只属于一张表,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region(裂变)
    • hbase.hregion.max.filesize 通过设置这个参数可以设置阈值大小

img

  • 当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver上。一张表后期有可能有多个Region
    • 因为随着时间的推移,Region会越来越大
    • Region达到阈值10G的时候会被平分(逻辑上平分,尽量保证数据的完整性)。
    • 会将切分后的其中一个Region转移到其他的HRegionServer上管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bu9Dr2FS-1627040857644)(https://cdn.jsdelivr.net/gh/ShaneCheng0202/image-hosting@master/hbase/region_change_process.3fet67vbjc60.png)]

  • 为了防止前期数据的处理都集中在一个HRegionServer,我们可以根据自己的业务进行预分区

img

Store

  • HRegion是表获取和分布的基本元素,由一个或者多个Store组成,每个store保存一个columns family

  • 每个Store又由1个memStore和0或多个StoreFile组成。

    • Table			(HBase table)
      	Region			(Regions for the table)		
      		Store			(Store per ColumnFamily for each Region for the table)
      			memStore		(MemStore for each Store for each Region for the table)
      			StoreFile		(StoreFile for each Store for each Region for the table)
      				Block			(Blocks within a StoreFile within a Store for each Region)
      
    • img

  • HFile是Hbase在HDFS中存储数据的格式,它包含多层的索引,这样在Hbase检索数据的时候就不用完全的加载整个文件。

  • 索引的大小(keys的大小,数据量的大小影响block的大小,在大数据集的情况下,block的大小设置为每个RegionServer 1GB也是常见的。

Storefile

img

img

  • Data Blocks段-保存表中的数据,这部分可以被压缩
  • Meta Blocks 段(可选的)-保存用户自定义的kv对,可以被压缩。
  • File Info段-Hfile的元信息,不被压缩,用户也可以在这一部分添加自己的元信息。
  • Data Block Ilnex段-Data Block的索引。每条索引的key是被索引的block的第一条记录的key
  • Meta Block Index段(可选的)-Meta Block的索引。
  • Trailer-这一段是定长的。
    • 保存了每一段的偏移量,读取一个HFile时,会首先读取Trailer
    • Trailer保存了每个段的起始位置(段的Magic Number用来做安全check)
    • 然后,DataBlock Index会被读取到内存中,这样,当检索某个key时,不需要扫描整个HFile,而只需从内存中找到key所在的block
    • 通过一次磁盘io将整个block读取到内存中,再找到需要的key。DataBlock Index采用LRU机制淘汰。

MemStore

  • HFile中并没有任何Block,数据首先存在于MemStore中。Flush发生时,创建HFile Writer

  • 当操作数据的时候,第一个空的Data Block初始化,初始化后的Data Block中为Header部分预留了空间,

    Header部分用来存放一个Data Block的元数据信息。

  • 位于MemStore中的KeyValues被一个个append到位于内存中的第一个Data Block中:

    • 注:如果配置了Data Block Encoding,则会在Append Keyalue的时候进行同步编码,编码后的数据不再是单纯的Keyvalue模式。
    • Data Block Encoding是HBase为了降低KeyValue结构性膨胀而提供的内部编码机制。

img

Hlog

  • Write After Log做任何操作之前先写日志

  • HLog文件就是一个普通的Hadoop Sequence File (sequenceFile文件是Hadoop用来存储二进制形式的[Key,Value]对而设计的一种平面文件)

    • sequeceFile的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息工除了table和region名字外,同时还包括sequence number和timestamp
    • timestamp是”写入时间”,
    • sequence number的起始值为0,或者是最近一次存入文件系统中sequence number
    • SequeceFile的value是HBase的KeyValue对象,即对应HFile中的KeyValue。
  • 日志直接存放到HDFS上,写入的数据就是

    • 当前的日志序列号(Sequence)
    • 本次的操作
  • 当memStore达到阈值的时候开始写出到文件之后,会在日志中对应的位置标识一个检查点

  • 一个HRegionServer只有一个Log文档

  • MasterProcWAL: HMaster记录管理操作,比如解决冲突的服务器,表创建和其它DDLs等操作到它的WAL文件中,这个WALs存储在MasterProcWALs目录下,它不像RegionServer的WALs,HMaster的WAL也支持弹性操作,就是如果Master服务器挂了,其它的Master接管的时候继续操作这个文件。

    注:WAL(Write Ahead Log)预写日志,是数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性。

  • WAL记录所有的Hbase数据改变,如果一个RegionServer在MemStore进行FLush的时候挂掉了,WAL可以保证数据的改变被应用到。如果写WAL失败了,那么修改数据的完整操作就是失败的。

    • 通常情况,每个RegionServer只有一个WAL实例。在2.0之前,WAL的实现叫做HLogo
    • WAL位于/hbase/WALs/目录下
    • MultiWAL:如果每个RegionServer只有一个WAL,由于HDFs必须是连续的,导致必须写WAL连续的,然后出现性能问题。MultiWAL可以让RegionServer同时写多个WAL并行的,通过HDFS底层的多管道,最终提升总的吞吐量,但是不会提升单个Region的吞吐量。

img

L,由于HDFs必须是连续的,导致必须写WAL连续的,然后出现性能问题。MultiWAL可以让RegionServer同时写多个WAL并行的,通过HDFS底层的多管道,最终提升总的吞吐量,但是不会提升单个Region的吞吐量。

[外链图片转存中…(img-bxkqxdOe-1627040857650)]

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 16:15:03  更:2021-07-25 16:15:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/22 23:32:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码