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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 深入HBase -> 正文阅读

[大数据]深入HBase

深入HBase

1.HBase架构分析
在这里插入图片描述

  • zookeeper:
    1.为HBase集群提供协调服务;
    2.管理HMaster和HRegionServer的状态;
    3.在HRegionServer宕机时通知HMaster;
  • HMaster:
    Hmaster为HBase集群的主节点,集群支持多个HMaster主节点(根据zookeeper选主),以此实现HA;
    主要职责:
    1 管理HRegionServer,实现负载均衡;
    2 管理和分配Region;
    3 管理namespace和Table的元数据(存储在HDFS上);
    4 权限控制;
  • HRegionServer:
    1.HBase集群的从节点;
    2.HRegionServer一般建议和DataNode部署在同一台服务器上,以此减少数据的传输;
    3.HRegionServer包含了一个HLog和多个HRegion,只要是对数据产生变化的操作都会先记录到HLog中,然后才把数据写入到对应的HRegion中,HRegion则是实际存储数据的地方;
  • 客户端请求流程:
    1.客户端在连接hbase的时候首先需要连接到zookeeper;
    2.首先会找zookeeper里面/hbase/meta-region-server节点,这个节点里面保存了meta表的数据,也就是region所在的regionserver信息;
    3.客户端调用对应的reigonServer获取meta中存储的信息(meta中存储了hbase中所有表的相关信息),并在本地缓存当前需要用到的部分meta信息(因为meta信息在数据量多的时候是很大的,不可能缓存全部数据),以避免频繁调用regionServer获取meta信息;

2.Region概述
一张表中的数据,会按照行被横向划分为多个region(区域),每个region是按照存储的rowkey的最小行键和最大行键指定的【startRowKey,endRowKey】同时rowkey是有序存储的,同时随着表中的数据越来越多,region也会越来越大,当region大到一定程度的时候会自动拆分,以确保region始终不会太大;
在这里插入图片描述

一张表如果数据量很大的话会有多个region,region内部的每个列族都会是一个单独的文件;
总结:
一行数据如果有多个列族,则该行数据会被存储在多个文件中,同理,一个列族如果数据流量够大的话也会被存储在多个region中(横向切分);
一个region中可以包含多个列族文件;

3.Region详解
在这里插入图片描述
1.一个HRegion中包含多个Store(因为一个表可能会有多个列族),每个列族对应一个Store;
2.Store中包含两部分内容,MemStore(基于内存的Store)和StoreFile;
3.当有请求需要写数据的时候首先会写入MemStore,当MemStore达到阈值之后才会把数据持久化到StoreFile中;
4.StoreFile底层对应一个HFile文件,这个HFile文件最终会通过DFS Client写入到HDFS中;

4.HLog
WAL(Write-Ahead-Logging预写日志系统)最重要的作用是灾难恢复,作用类似于mysql的binlog,它记录所有对数据的变动操作,一旦服务器崩溃,通过重放log可以恢复崩溃之前的数据;
HLog是WAL的一个实现类,一个HRegionServer只有一个HLog,因为数据在Region中首先会被存在MemStore中,此时还没有持久化,当此时服务器宕机的时候,MemStore中的数据就会丢失,通过HLog的重放功能,则可以保证数据最终都会被持久化到HFile中,也就是被存储到HDFS中;

5.HFile
HFile是HBase中最小的结构,HBase的底层数据都存放在HFile中,HFile从根本上说就是HDFS中的文件,只是它有自己特殊的格式;
在这里插入图片描述
HFile文件由六部分组成;

  • Data:
    以key-value的形式保存表中的数据,这部分数据可以被压缩,每个块都有一个Magic头,这个Magic头里面存储偏移量和第一个key;
  • Meta:
    主要存储用户自定义的一些key-value,这部分是可选的;
  • File Info:
    它是定长的,主要记录了文件的一些元数据信息;
  • Data Index:
    记录了每个数据块的起始索引;
  • Meta Index:
    记录了每个元数据块的起始索引;
  • Trailer:
    它是定长的,主要用于指向其它数据块的一个起始点;

6.BloomFilter布隆过滤器
布隆过滤器是一种概率型数据结构,它能够准确判断该HFile中的所有数据块是否有我们需要查询的数据,从而大大减少不必要的块加载(采用该过滤器会在生成HFile的时候包含一份布隆过滤器结构的数据,开启布隆过滤器会有一定的存储及内存开销,大多数情况下这种负担对于带来的效果来说都是可以接受的),它是HBase中的高级功能,它能减少特定访问模式(get/scan)下的查询时间,提高HBase集群吞吐量;

7.HFile compaction(合并)机制
当MemStore达到阈值时会产生一个StoreFile(HFile)文件,随着数据量的持续写入,StoreFile文件会越来越多,最终导致读性能的下降,因此可以对这些StoreFile文件进行合并操作,将多个StoreFile文件合并成一个StoreFile文件,合并操作会对HBase的数据进行大量的IO操作;
合并操作分为major(大合并)和minor(小合并)两种;
minor(小合并): 只做部分文件的合并操作,合并过程一般比较快,而且IO相对较低;
major(大合并): 将Region下的所有HFile合并成一个文件(会忽略掉已经删除的文件,TTL过期的文件,版本超过限定的数据),会产生大量的IO操作,对HBase的读写性能造成较大影响(线上环境一般会关闭大合并功能,改为手动触发);

8.Region split(分裂)机制
HBase在创建表的时候默认只会分配一个region,为了达到负载均衡,当region达到一定大小时会将region分裂成2个新的子region,同时清除掉父region,HMaster会根据负载均衡策略,重新分配region所属的regionServer,从而发挥分布式系统的优点;
触发region split的条件:
ConstantSizeRegionSplitPolicy(0.94版本前默认切分策略),一个region中最大HFile的大小大于设置的阈值之后才会触发切分(对小表不友好);
IncreasingToUpperBoundRegionSplitPolicy(0.94~2.X版本默认切分策略),自动动态根据region数量以及在regionServer上的分布动态调整,最大大小也通过hbase.hregion.max.filesize这个参数来控制大小,使其在这个范围内动态调控;

9.Region LoadBalance策略
HMaster会根据指定的负载均衡策略挑选出一些region,并将这些region分配到负载比较低的regionServer上,由于HBase中的所有数据都是写到HDFS中的,因此HBase中region的移动其实是非常轻量级的(保持Region对应的HDFS文件位置不变,只需要将Region的元数据分配到对应的RegionServer上即可);
官方目前支持两种Region分配策略:
DefaultLoadBalancer:
这种策略保证每个RegionServer中的Region个数基本上都相等(假如有些region数量大,有些region数量小,在这种情况下其实是不均衡的);
StochasticLoadBalancer:
综合权衡的负载均衡策略,大致由每台服务器读请求数、每台服务器写请求数、Region个数、移动代价、数据Locality、每张表占据RegionServer中Region个数上线决定;

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-06 13:53:32  更:2022-02-06 13:56:06 
 
开发: 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/24 13:43:45-

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