HBASE知识点

news/发布时间2024/5/19 16:05:01

HBASE是什么?

  • 高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库。
  • 利用HDFS作为其文件存储系统,利用MapReduce来处理HBase中的海量数据。利用Zookeeper作为其分布式协同服务。
  • 用于存储非结构化和半结构化的松散数据。

HBase数据模型

  • RowKey: 唯一标识一行记录,按字典顺序排序,RowKey只能存储64K的字节数据。

字典顺序存储,在合理的rowkey设计情况下,范围查询很快。

  • Column Family列族:
    – HBASE中每个列都归属于某个列族,列族必须作为表模式定义的一部分先给出。
    – 列名以列族作为前缀,每个列族都可以有多个列成员(column),新的列族成员可以随后按需动态加入。
    – 权限控制、存储以及调优都是在列族层面进行的。
    – HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
  • TimeStamp:
    – 在HBase每个cell存储单元对同一份数据有多个版本,更加唯一的时间戳来区分每个版本之间的诧异,不同版本的数据安装时间大圩排序,最新的数据版本排在最前面。
    – 时间戳类型是64位整型。
    – 时间错可以由HBASE在数据写入时自动赋值,此时时间戳是精确到毫秒的当前系统时间。
    – 时间戳也可以由用户显示赋值,如果应用程序要避免数据版本冲突,就必须自己生产具有唯一性的时间戳。
  • Cell单元格
    – 有行和列的坐标交叉决定。
    – 单元格室友版本的。
    – 单元格的内容是未解析的字节数组:{rowkey,column(=family+qualifier),version}唯一确定的单元
    – cell中的数据是没有类型的,全部是字节数组形式存储的。

HBase架构

在这里插入图片描述
在这里插入图片描述

Client

访问Hbase的接口并维护Cache加快对Hbase的访问。

Zookeeper

保证集群中只有一个活跃的Master。存储所有Region的寻址信息。实时监控Region的上线、下线信息,并实时通知Master。存储Hbase的schema和table元数据。

HMaster

为RegionServer分配Region,负责RegionServer的负责均衡。发现失效的RegionServer并重新分配其下的Region,管理用户对Table的CRUD。

HRegionServer

负责维护HMaster分配给他的Region,处理这些Region的IO请求。当Region变大到一个阈值后,RegionServer会进行Region拆分,并告知Master节点,由Master协调拆分后的Region进行迁移。

HRegion

HBase自动把表水平划分成多个Region,每个Region会保存一个表里面某段连续的数据(类似MYSQL表的横向拆分),每个表最开始只有一个Region,随着数据不断插入,Region不断增大,当增大到一个阈值时,Region就会才分成两个新的Region(裂变)。当Table中的行不断增多,就会有越来越多的Region,这样一张完整的表被保存在多个RegionServer上。

Store的MemStore和StoreFile

一个Region有多个Store组成,一个Store对应一个列族。Store报货位于内存中的Memstore和位于磁盘中的StoreFile。
写操作先写入Memstore,当Memstore中的数据打到某个阈值,HRegionServer会启动FlashCache进行进行写入StoreFile,每次写入形成单独的StoreFile。当StoreFile文件数量增长到一定的阈值后,系统会进行合并,在合并过程中会进行版本合并和删除工作(写操作的时候都是append操作,不会有更新和删除动作,所以速度很快),形成更大的StoreFile。当一个Region所有的StoreFile的大小和数量超过一定的阈值后,会把所有的Region分隔成两个,并由HMaster分配到相应的RegionServer服务器,实现负载均衡
读操作先在Memstore找,找不到去blockCache找,找不到再到StoreFile找。

blockCache是Hbase的读缓存,HBase采用最近最少访问策略来管理。

HLog

在HBase写操作时会先写HLog,然后再往Memstore写。HLog先写到内存,然后每秒进行一次持久化。在写入Memstore后,持久化到StoreFile之前如果HRegionServer挂掉了,则通过HLog进行数据恢复。如果HLog持久化之前挂掉了,那么这一秒的数据将丢失。

HFILE

StoreFile存储在HDFS中的文件名称。

写操作

  1. 访问ZK得到元数据表地址。
  2. 访问RegionServer找到列族Store;
  3. 往Store的MemStore写数据(先写入HLog,再写入MemStore)。
  4. MemStore在数据快满或满64M的时候进行持久化到StoreFile。

读操作

  1. 访问ZK得到元数据表地址。
  2. 访问RegionServer找到列族Store。
  3. 从MemStore读数据,如果MemStore中没有就从blockCache(读缓存)读。
  4. blockCache没有则从磁盘读取,如果读取到则返回并缓存到blockCache。

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

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

相关文章

分布式、锁、延时任务

1. redission redission 原理 Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案) 2.zk 2.1 指令 ls / / 下有哪些子节点 get /zookeeper 查看某个子节点内容 create /aa “test” delete /aa set /aa “test01” 2.2 创建节点 模式 默认创建永久 create -e …

Bash-变量(自定义/预定义/环境/位置参数)

变量 - 自定义/预定义/环境/位置参数变量设置规则变量名称可由字母、数字和下划线组成,但不能以数字开头(与python命名规则一致) Bash中,变量的默认类型都是字符串型,如果要数值运算,则必须指定变量为数值型 变量由 = 连接值,等号左右两侧不能为空 变量的值如果有空格,…

第二周学习笔记

I/O数据库的使用 一、I/O数据库与系统调用 系统调用函数:open()、read()、write()、lseek()、close() I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose() I/O库函数例系统调用例两者区别:IO库函数提供了更高级别的接口和抽象,使得输入和输出操作更加方便和易用,而…

蜂巢能源电芯制造工艺细节探秘

引言 这次很高兴有机会,进入蜂巢电池的工厂进行深度的参观和了解,如下图所示,蜂巢的产线布置主要的三部分,是电极装配车间、电芯封装和化成车间、最后是模组车间(这部分以后再单独介绍)。从一颗电芯的制造来看,电芯的生产工艺主要包括几个阶段: 1)前段工序是把电池的…