HBase简要介绍

HBase数据模型

HBase的数据通过行键列族列限定符时间戳这四维来定位,一个行可以有一个行键和任意多个列,单元格是具体存储数据的地方
在这里插入图片描述

HBase概念视图

在这里插入图片描述

HBase物理视图: 按照列族为单位进行存储

在这里插入图片描述

HBase的实现原理

H B a s e 的 功 能 组 件 { 库 函 数 : 一 般 用 于 链 接 每 个 客 户 端 M a s t e r 服 务 器 : 充 当 管 家 的 作 用 ( 包 括 : 对 分 区 信 息 进 行 维 护 和 管 理 、 维 护 了 一 个 R e g i o n 服 务 器 列 表 、 整 个 集 群 中 有 哪 些 R e g i o n 服 务 器 在 工 作 、 负 责 对 R e g i o n 进 行 分 配 、 负 载 均 衡 ) R e g i o n 服 务 器 : 负 责 存 储 不 同 的 R e g i o n HBase的功能组件\begin{cases} 库函数:一般用于链接每个客户端\\ Master服务器:充当管家的作用\\(包括:对分区信息进行维护和管理、维护了一个Region服务器列表、\\整个集群中有哪些Region服务器在工作、负责对Region进行分配、负载均衡)\\ Region服务器:负责存储不同的Region \end{cases} HBaseMaster(RegionRegionRegion)RegionRegion

一个Hbase表被划分成多个Region,数据在Hbase运作过程中会不断增加,这时,当一个Region增大到一定程度会分裂成多个新的Region。不同的Region会被分配到不同的Region服务器上,但是对于同一个Region绝对不会拆分到不同的Region服务器上去。
在这里插入图片描述

Region的定位问题:

HBase设计了三层结构实现Region的寻址和定位

在这里插入图片描述

region的寻址过程: 首先访问ZooKeeper服务器取出ROOT表的地址 ,然后根据ROOT表找到.META表的地址,最后根据.META表找到用户数据表地址,取出用户数据

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

层次名称作用
第一层Zookeeper文件记录了-ROOT-表的位置信息
第二层-ROOT-表记录了.META.表的Region位置信息;-ROOT-表只能有一个Region,绝对不会再进行分裂。通过-ROOT-表,就可以访问.META.表中的数据
第三层.META.表记录了用户数据表的Region位置信息,.META.表可以有多个Region,保存HBase中所有用户数据表的Region位置信息

为了加快访问速度,.META.表全部Region都会被保存在内存中

HBase的三层结构能否满足企业实际的存储需求?

假设.META.表的每行(一个映射条目)在内存中大约占用1KB,并且每个Region限制为128MB,那么,上面的三层结构可以保存的用户数据表的Region数目的计算方法是:(-ROOT-表能够寻址的.META.表的Region个数)×(每个.META.表的Region可以寻址的用户数据表的Region个数)

那么三层结构可以保存的Region数目是(128MB/1KB)×(128MB/1KB)= 2 34 2^{34} 234 Region

总容量= 2 34 ∗ 128 M B = 2 E B 2^{34}*128MB=2EB 234128MB=2EB

所以能够满足企业的使用需求

HBase运行机制

HBase的系统架构

在这里插入图片描述

客户端: 访问HBase的接口

Zookeeper服务器: 实现协同管理服务,维护和管理整个HBase集群,包括检测Region服务器故障

Master: 对表增删改查,负责不同Region服务器的负载均衡,负责调整分裂、合并后Region的分布,负责重新分配故障、失效的Region服务器

Region服务器: 负责用户数据的存储和管理,Region服务器向HDFS文件系统中读写数据
在这里插入图片描述

一个Region服务包括多个Region,这些Region共用一个公共的HLog;每个Region按照列簇进行存储,单独构成一个Store,一个Store就是代表一个列簇;一个Store中的数据不是直接写到底层中去,而是先写到MemStore(缓存)中,缓存满了后再flush到StoreFile磁盘文件中;StoreFile是HBase中的表示形式,底层是借助于HDFS中称为HFile的文件存储。

为什么每个Region服务的Region共用一个HLog? 主要为了提高对表的写操作性能。比如有1000个Region,那么分配1000个HLog时,打开1000个文件,每次针对不同的Region写入不同的HLog,效率低下。

用户读写数据过程

写入数据时,为了保证数据的安全和可恢复性,先写入HLog日志文件中,再写入MemStore缓存中,只有保证MemStore对应的HLog中的数据被完整写到磁盘中,MemStore中的数据才能被刷写到磁盘

读取数据时, 先访问MemStore缓存,缓存中没找到才去磁盘中的StoreFile寻找

缓存刷新

①系统会周期性地把MemStore缓存里的内容刷写到磁盘的StoreFile文件中,清空缓存,并在Hlog里面写入一个标记;

②每次刷写都生成一个新的StoreFile文件,因此,每个Store包含多个StoreFile文件;

③每个Region服务器都有一个自己的HLog文件,每次启动都检查该文件,确认最近一次执行缓存刷新操作之后是否发生新的写入操作;如果发现更新,则先写入MemStore,再刷写到StoreFile,最后删除旧的Hlog文件,开始为用户提供服务

StoreFile的合并和分裂的过程

在这里插入图片描述

只有当磁盘中刷写生成的StoreFile文件数量达到一定的阈值后,才进行StoreFile的合并;但是,当合并生成的StoreFile越来越大时,又会引发分裂操作。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HBase是一个分布式的NoSQL数据库,它可以在大规模的数据集上提供实时读写操作。HBase集群的安装与配置需要以下几个配置文件: 1. hbase-site.xml:这个文件包含了HBase的核心配置信息,比如ZooKeeper的地址和端口、HBase的数据目录、RegionServer的数量等。以下是一个hbase-site.xml的示例代码: ``` <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>localhost</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/usr/local/zookeeper/data</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.regionserver.handler.count</name> <value>30</value> </property> </configuration> ``` 2. hbase-env.sh:这个文件包含了HBase的环境变量设置,比如JAVA_HOME、HBase的JVM参数、Hadoop的配置文件路径等。以下是一个hbase-env.sh的示例代码: ``` export HBASE_OPTS="-XX:+UseConcMarkSweepGC -XX:ErrorFile=/var/log/hbase/hs_err_pid%p.log -Djava.net.preferIPv4Stack=true" export HBASE_MANAGES_ZK=false export HBASE_LOG_DIR=/usr/local/hbase/logs export HBASE_PID_DIR=/var/run/hbase export HBASE_IDENT_STRING=$USER export HBASE_CLASSPATH=$HADOOP_CONF_DIR:$HBASE_CLASSPATH ``` 3. regionservers:这个文件包含了HBase集群中所有的RegionServer的主机名。以下是一个regionservers的示例代码: ``` localhost node1.example.com node2.example.com ``` 以上是HBase集群的三个核心配置文件的示例代码。其中hbase-site.xml和hbase-env.sh是必填项,regionservers文件是可选项。在实际部署中需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值