ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

HBase技术原理(nosql)

2022-07-28 17:01:19  阅读:331  来源: 互联网

标签:存储 nosql 行键 Region MemStore 原理 HBase 数据


  NoSQL数据库 关系型数据库与NoSQL数据库的主要区别 CAP理论和BASE原则 HBase概述 HBase与关系数据库的对比 HBase应用场景 HBase数据模型 HBase表结构 行存储和列存储的比较 HBase架构 HBase架构介绍 HFile文件格式 Region定位(1) Region定位(2) 用户读写数据过程 Flush机制 Compaction机制(1) Compaction机制(2) Region拆分 其他流程 HBase性能优化-行键 HBase性能优化-预分区 HBase性能优化-表热点现象 HBase常用操作 DDL操作(1) DDL操作(2) 权限管理 NoSQL数据库
  • NoSQL(not only sql),即“不仅仅是sql”。
  • NoSQL数据库分类:
  1. 键值存储数据库
  2. 列存储数据库
  3. 文档数据库
  4. 图数据库
  关系型数据库与NoSQL数据库的主要区别

 

 

  CAP理论和BASE原则
  • CAP理论
  1. 一致性
  2. 可用性
  3. 分区容错性
  • BASE原则
  1. 基本可用
  2. 软状态
  3. 最终一致性
  HBase概述
  • HBase是一个高可靠性,高性能,面向列,可伸缩的分布式存储系统。
  1. 适合于存储大表数据(表的规模可以达到数十亿行以及数百行列),并且对大表数据的读,写
  2. 访问可以达到实时级别。
  3. 利用Hadoop HDFS作为其文件存储系统,提供实时读写的分布式数据库系统。
  4. 利用Zookeeper作为协同服务。
  HBase与关系数据库的对比
  • HBase与传统的关系数据库的区别主要体现在一下几个方面:、
  1. 数据索引:关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。HBase只有一个索引,即行键。通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,后者通过行键扫描,从而使得整个系统不会慢下来。
  2. 数据维护:在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留。
  3. 可伸缩性:关系数据库很难实现横向扩展,纵向国战的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩。
  HBase应用场景

 

 

  HBase数据模型
  • 特点
  1. 一个表可以有上亿行,上百行列
  2. 面向列(族)的存储和权限控制,列(族)兜里检索
  3. 表结构稀疏,行和列的交叉点被称为cell,表的行键也是一段字节数组
  4. 所有的表都必须有主键,表是按key排序的

 

 

  HBase表结构
  • 表:HBase采用表来组织数据,表由行和列组成,列划分为若干个列族。
  • 行:每个HBase表都由若干个行组成,每个行由行键来标识。
  • 列族:一个HBase表被分组成许多“列族”的集合,他是基本的访问控制单元。
  • 列限定符:列族里的数据通过列限定符(或列)来定位。
  • 单元格:在HBase表中,通过行,列族和列限定符确定一个“单元格”(cell),单元格中村粗的数据没有数据类型,总被视为字节数组byte[]
  • 时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引。

 

 

  行存储和列存储的比较
  • 行存储,数据按行存储在底层文件系统中。通常,每一个会被分配固定的空间。
  1. 优点:有利于增加/修改整行记录等操作;有利于整行数据的读取操作。
  2. 单列查询时,会读取一些不必要的数据。
  • 列存储,数据以列为单位,存储在底层文件系统中。‘
  1. 优点:有利于面向单列数据的读取/统计等操作。
  2. 缺点:整行读取时,可能需要多次I/O操作。

 

 

HBase架构

 

 

  HBase架构介绍
  • 客户端
  1. 包含访问HBase的接口,并维护Cache来加快对HBase的访问
  • HMaster
  1. 主要负责表和region的管理工作
  • HRegionServer
  1. 主要负责相应用户的I/O请求,向HDFS中读/写数据
  2. 管理了一系列HRegin对象,每个HRegin由多个store组成
  • ZooKeeper
  HFile文件格式
  • HFile文件格式分为如下6部分:
  1. Data Block:保存table中的数据
  2. Meta Block:保存用户自定义的key-value对
  3. file Info:HFile的元信息
  4. Data Block Index:Data Block的索引
  5. Trailer:这一段是定长的,保存了每一段的偏移量。
  Region定位(1)

 

 

Region定位(2)
  • 为了加快访问速度,.meta.表会被保存在内存中。
  • 假设.META.表的每行(一个映射条目)在内存中大约占用1kb,并且每个Region限制为128MB.
  • 两成结构可以保存的Region数目是128MB/1kb=2的17次方个Region。
  用户读写数据过程
  • 用户写入数据时,被分配到相应Region服务器去执行。
  • 用户数据首先被写入到MemStore和Hlog中。
  • 只有当操作写入Hlog之后,commit()调用才会将其返回给客户端。
  • 党与胡读取数据时,Region服务器会首先访问MemStore缓存,如果找不到,再去磁盘上面的storefile中寻找。
  Flush机制
  • 触发MemSTORE的FLUSH操作场景
  1. MemStore到达HBase.hregion.memstore.flush.size(默认128MB),所有Memstore触发FLush。
  2. 当MemStore的内存用量比例到达HBase.regionserver.global.me mstore.upp -erlimit的指定大小时,触发Flush。Flush的顺序基于Memstore内存用量大小的倒序,直到MemStore内存用量小于HBase.regionserver.global.memstore.lowerlimiit.
  3. 当wal的日志数量超过HBase.regionserver.max.logs,MemStore就会FLush到磁盘,降低WAL中的日志数量。最“老”的MemStore会第一个被Flush,直到日志数量小于HBase.regionserver.max.logs。
  4. HBase定期Flush MemStore:默认周期为1小时,确保MemStore不会长时间没有持久化。
  5. 手动执行Flush。
  Compaction机制(1)
  • Minor Compaction是指选取一些小的,相邻的storefile,讲题目合并成一个更大的storefile。
  • Major Compaction是指所有的StoreFile。
Compaction机制(2)
  • 除法Compaction的因素
  1. MemStore Flush
  2. 后台线程周期性检查
  3. 手动触发
  Region拆分
  • 当Region的大小超过了预设的阈值时,HBase会拆分Region。
  • Region拆分策略
  1. constantsizeregionsplitpolicy
  2. increasingtoupperboundregionsplitpolicy
  3. steppingsplitpolicy
  4. delimitedkeyprefixregionsplitpolicy
  5. disabledregionsplitpolicy
  其他流程
  • Region合并
  1. Region拆分更多处于提高性能的目的,但Region合并更多出于维护系统的目的。
  • HLog工作原理
  1. 一种预写日志。
  2. 用户更新的数据必须先写入日志后,才能写入MemStore缓存。
  3. 知道MemStore缓存内容对应的日志已经写入磁盘,该缓存内容才能被Flush到磁盘。
  HBase性能优化-行键
  • 行键是按照字典序存储。因此,设计行键时,要充分利用这个排序特点,将经常一起读取的数据存储到一块,将最近可能会被访问的数据放在一块。
  • 举个例子:如果最近写入HBase表中的数据是最可能被访问的,可以考虑将时间戳作为行键的一部分,由于是字典序排序,所以可以使用long.MAX_VALUE - timestamp作为行键,这样能保证新写入的数据在读取时可以被快速命中。
  HBase性能优化-预分区
  • 手动指定预分区
  1. 通过在创建表语句中指定行键的前缀界限来指定预分区
  2. create 'person','info1','info2',SPLITS=>['1000','2000','3000','4000']
  • 使用SPLITALGO的UniformSplit方式
  1. HexStringSplit适用于采用十六进制的字符串作为前缀的行键
  2. DecimalStringSplit适用于采用十进制数字字符串作为前缀的行键
  3. UniformSplit则适用于前缀完全随机的行键。
  HBase性能优化-表热点现象
  • 解决“热点”现象有如下几种方法:
  1. 预分区:让表中的数据可以均衡的分散在集群中
  2. 加盐:RowKey的前面增加随机数
  3. 反转:反转固定长度或者数字格式的行键,可以使得行键中经常改变的部分(最没有意义的部分)放在前面。
  HBase常用操作
  • 查看集群的状态
  1. hbase>status
  2. hbase>status 'simple'
  3. hbase>status 'summary'
  4. hbase>status 'detailed'
  • 帮助命令
  1. hbase>help
  DDL操作(1)
  • 列出所有表
  1. hbase>list
  • 获取表的详细信息
  1. hbase>describe 'tablename'
  • 创建一张表
  1. create<table>,{NAME=><family> [VERSIONS=><version>...]}
  • 修改一张表
  1. hbase>alter 't1',NAME=> 'f1',VERSIONS=>5
  DDL操作(2)
  • 插入更新数据
  1. put <table>,<rowkey>,<family:column>,<value>,<timestamp>
  • 查询数据
  1. get<table>,<rowkey>,[<family:column>,...]
  • 扫描表
  1. scan <table>,{COLUMNS=>[<family:column>,...],LIMIT=>num}
  • 删除某个值
  1. delete<table>,<rowkey>,<family:column>,<timestamp>
  • 清空表
  1. truncate<table>(慎用)
  权限管理
  • 语法:
  1. grant <user> <permissions> <table> <column family> <column qualifier>
  2. 权限用R,W,X,C,A这5个字母表示,其对应关系为READ('R'),WRITE('w'),EXEC('x'),CREATE('C'),ADMIN('A')
  • 查看权限
  1. user_permission<table>
  • 收回权限
  1. revoke <user> <table> <column family> <column qualifier>


标签:存储,nosql,行键,Region,MemStore,原理,HBase,数据
来源: https://www.cnblogs.com/06080410z/p/16529283.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有