首页 > 其他分享 >Hbase介绍

Hbase介绍

时间:2024-03-07 16:57:03浏览次数:22  
标签:存储 region 介绍 Region Hbase 数据 HBase

什么是Hbase
  Hbase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用Hbase技术可在廉价的PC Server上搭建大规模结构化存储集群。

  利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理 Hbase中的海量数据,利用Zookeeper作为其分布式协同服务

  主要用来存储非结构化和半结构化的松散数据

Hbase 的特点
  Hbase 中的表一般有以下特点。

  大:一个表可以有上亿行,上百万列。
  面向列:面向列(列簇)的存储和权限控制,列(簇)独立检索。
  稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
  数据类型单一:HBase 中的数据类型只有一种String。
  数据多版本:列中的数据可以有多个版本,查询时可以通过指定版本号获取

HBase与传统关系数据库的对比分析
  数据类型:关系数据库采用关系模型,具有丰富的数据类型和存储方式,HBase则采用了更加简单的数据模型,它把数据存储为未经解释的字符串;

  数据操作:关系数据库中包含了丰富的操作,其中会涉及复杂的多表连接。HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等,因为HBase在设计上就避免了复杂的表和表之间的关系;

  查询语言:关系型数据库可使用sql进行查询,Hbase只能使用API(get、put、sacn等)进行操作

  存储模式:关系数据库是基于行模式存储的。HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的;

  数据索引:关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。HBase只有一个索引——行键,通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来;

  数据维护:在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留;

  可伸缩性:关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩

整体架构

HBase架构中的主要组件

  

1.ZooKeeper

  HBase集群要依赖ZooKeeper才能运行。主要作用是:

  Master高可用,协助选举Master

  监听RegionServer状态(心跳),向Master汇报RegionServer上下线信息

  存放与维护集群配置信息,如hbase:meta表的地址。

2.Client

  包含访问HBase的接口并维护cache来加快对HBase的访问。Client可不经过Master直接与Region Server通信,发出读或写请求,所以Master挂掉的情况下,集群仍然可以运行一段时间。

3.HMaster

  HMaster是集群的主节点,本质上是一个进程。主要作用有

  负责管理元数据,如执行DDL操作、定期更新hbase:meta表

  分配与移动region以保证集群的负载均衡(单个region过大,会拆分、转移)

  管理RegionServer,出现问题时进行故障转移 在分布式集群中,Master通常运行在NameNode上。

4.Region Server

  Region Server是Region的管理者,本质上是一个进程。主要作用是:

  负责数据的增删改查,即DML操作

  负责region的拆分与合并

  将MemStore中数据刷写到StoreFiles

  检查RegionServer的HLog文件 在分布式集群中,RegionServer都运行在DataNode上。

5.Region

  HBase自动把表水平划分成多个区域(region),每个region会保存一个表 里面某段连续的数据;每个表一开始只有一个region,随着数据不断插 入表,
  region不断增大,当增大到一个阀值的时候,region就会等分会 两个新的region(裂变);
  当table中的行不断增多,就会有越来越多的region。这样一张完整的表 被保存在多个Regionserver上。

 

 

Memstore 与 storefile

  一个region由多个store组成,一个store对应一个CF(列族)
  store包括位于内存中的memstore和位于磁盘的storefile写操作先写入 memstore,当memstore中的数据达到某个阈值,
  regionserver会启动 flash cache进程写入storefile,每次写入形成单独的一个storefile
  当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、 major compaction),在合并过程中会进行版本合并和删除工作 (majar),形成更大的storefile。
  当一个region所有storefile的大小和超过一定阈值后,会把当前的region 分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡。
  客户端检索数据,先在memstore找,找不到再找storefile
  Region是HBase中分布式存储和负载均衡的最小单元。最小单元就表 示不同的HRegion可以分布在不同的Region server上。
  Region由一个或者多个Store组成,每个store保存一个columns family。
  每个Strore又由一个memStore和0至多个StoreFile组成。
  如图:StoreFile 以HFile格式保存在HDFS上。

 

6.HLog(WAL log):

  每个HRegionServer中都会有一个HLog对象,HLog是一个实现Write Ahead Log的类,每次用户操作写入Memstore的同时,也会写一份数据到HLog文件中,HLog文件定期会滚动出新,并删除旧的文件(已持久化到Storefile中的数据),当HRegionServer意外终止后,HMaster会通过Zookeeper感知,HMaster首先处理遗留的HLog文件,将不同region的log数据拆分,分别放在相应region目录下,然后再将失效的region(带有刚刚拆分的log)重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到Memstore中,然后flush到StoreFile,完成数据恢复。

7.hbase:meta

  hbase:meta(以前叫.META.)是之前说过的命名空间 hbase中的一张表。记录了全部表的所有region相关信息,如region位于哪个Region Server上。 重点:hbase:meta表的位置信息存储在Zookeeper中!!!

 

数据模型
  hbase在使用之前无需定义一个固定的表结构,同一个表中不同行数据可以包含不同的列。Hbase很适合存储不确定列、不确定大小的半结构化数据。

逻辑模型
逻辑视图

  RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要;

  Column Family:列族,拥有一个名称(string),包含一个或者多个相关列;

  Column:属于某一个columnfamily,

  familyName:columnName,每条记录可动态添加;

  Version Number:HBase中通过row和columns确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

  Value(Cell):由*{row key, column(* = + ), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

 

  以关系型数据的思维下会感觉,上面的表格是一个5列4行的数据表格,但是在HBase中这种理解是错误的,其实在HBase中上面的表格只是一行数据;

 

物理模型
  每个column family存储在HDFS上的一个单独文件中,空值不会被保存。

  HBase是一个列式存储数据库,数据按列族聚簇存储在存储文件(StoreFile)中,在逻辑视图上面有些列是空白的,空白的列单元格不会被存储,当请求这些空白的单元格时,会返回null值。如果在查询的时候不提供时间戳,那么会返回距离现在最近的那一个版本的数据,因为在存储的时候,数据会按照时间戳来排序。

  (1)HBase中表按照行键的范围被划分为不同的分区(Region),各个分区由分区服务器负责管理并提供数据读写服务,HBase主节点进程(HMaster)负责分区的分配以及在集群中的迁移。

  (2)一个分区同时有且仅由一个分区服务器提供服务。当分区增长到配置的大小后,如果开启了自动拆分(也可以手动拆分或者建表时预先拆分),则分区服务器会负责将这个分区拆分成两个。

每个分区都有一个唯一的分区名,格式是“<表名,startRowKey,创建时间>”。一个分区下的每个列族都会有一个存储仓库(Store),因此一个表有几个列族,那么每个分区就会有几个存储仓库。

  (3)每个Store(存储仓库)有且仅有一个MemStore(内存仓库),但是可以有多个存储文件。当分区服务器处理写入请求时,数据的变更操作在写入WAL后,会先写入MemStore,同时在内存中按行键排序。

当MemStore到达配置的大小或者集群中所有MemStore使用的总内存达到配置的阈值百分比时,MemStore会刷新为一个StoreFile(存储文件)到磁盘,存储文件只会顺序写入,不支持修改。

  (4)数据块(block)是HBase中数据读取的最小单元,StoreFile由数据块组成,可以在建表时按列族指定表数据的数据块大小。如果开启了HBase的数据压缩功能,数据在写入StoreFile之前会按数据块进行压缩,读取时同样对数据块解压后再放入缓存。理想情况下,每次读取数据的大小都是指定的数据块大小的倍数,这样可以避免一些无效的IO,效率最高。

 

 

 

Zookeeper中Hbase节点含义

  [meta-region-server, rs, splitWAL, backup-masters, flush-table-proc, master-maintenance, online-snapshot, switch, master, running, draining, namespace, hbaseid, table]

 

hdfs路径含义

 

 

HBase数据的读取流程
  1.Client访问zookeeper,获取元数据存储所在的regionserver

  2.通过刚刚获取的地址访问对应的regionserver,拿到对应的表存储的regionserver

  3.去表所在的regionserver进行数据的读取

  4.查找对应的region,在region中寻找列族,先找到memstore,找不到去blockcache中寻找,再找不到就进行storefile的遍历

  5.找到数据之后会先缓存到blockcache中,再将结果返回

  blockcache逐渐满了之后,会采用LRU的淘汰策略。

HBase数据的写入过程
  1、Client访问zookeeper,获取元数据存储所在的regionserver

  2、通过刚刚获取的地址访问对应的regionserver,拿到对应的表存储的regionserver

  3、去表所在的regionserver进行数据的添加

  4、查找对应的region,在region中寻找列族,先向memstore中写入数据

  5、当memstore写入的值变多,触发溢写操作(flush),进行文件的溢写,成为一个StoreFile

  6、当溢写的文件过多时,会触发文件的合并(Compact)操作,合并有两种方式(major,minor)(多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除)

  minor compaction:小范围合并,默认是3-10个文件进行合并,不会删除其他版本的数据。
  major compaction:将当前目录下的所有文件全部合并,一般手动触发,会删除其他版本的数据(不同时间戳的)
  7、当region中的数据逐渐变大之后,达到某一个阈值,会进行裂变(一个region等分为两个region,并分配到不同的regionserver),原本的Region会下线,新Split出来的两个Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。

 

Hbase启动时Zookeeper作用
  1.Hbase启动时需要读取zookeeper中meta-region-server,以获取Hbase的meta信息(位置信息)。

  2.拿到meta的位置信息后,到指定的regionserver读取元数据信息。

  3.加载元数据信息中的namespace,加载表。

 

 

参考:https://blog.csdn.net/sanhongbo/article/details/122222238

感觉讲的很细致

 

 

 

 

 

 

 

 



 

标签:存储,region,介绍,Region,Hbase,数据,HBase
From: https://www.cnblogs.com/juncaoit/p/18059277

相关文章

  • sqlite.dll介绍,sqlite.dll文件缺失的解决方法,3分钟快速修复sqlite.dll
    第一次见到这个dll,一般是找到这个dll,重新引用下。网上找到了关于这个dll的详细解释,其他dll应该也可以用这些方法修复,在此记录下。原文链接:https://zhuanlan.zhihu.com/p/668219472一.什么是SQLite.dllSQLite.dll是SQLite数据库引擎的一个关键组成部分。(SQLite是一个开源的嵌......
  • POSTGRESQL (PG) 6种索引类型介绍以及使用实例
    Postgresql中主要支持6种类型的索引:BTREE、HASH、GiST、SP-GiSP、GIN、BRIN。可以根据实际的应用场景选择合适的索引,BTREE、HASH是比较常用的索引。1.BTREE索引:CREATEINDEX默认使用BTREE索引,适合按照顺序存储的数据进行比较查询和范围查询,查询优化器会优先考虑使用BTREE索引,如......
  • Dash 2.16版本新特性介绍
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master大家好我是费老师,几天前Dash发布了其2.16.0版本,随后在修复了一些潜在问题后,于今天发布了可稳定使用的2.16.1版本,执行下面的命令进行最新版本Dash的安装:pipinstalldash-U2.16版本中为......
  • Subversion svn 开源的版本控制系统入门介绍 VCS
    拓展阅读Subversion开源的版本控制系统入门介绍VCSGit开源的版本控制系统-01-入门使用介绍Git开源的版本控制系统-02-baseusage基本用法Git开源的版本控制系统-03-时间数据回溯Git开源的版本控制系统-04-branchmanage分支管理Git开源的版本控制系统-05-tags标签......
  • TIDB使用介绍
    TiDB概述TiDB数据库官方网址:https://pingcap.com/zh/​TiDB是PingCAP公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理(HybridTransactionalandAnalyticalProcessing,HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融......
  • TIDB简介及TIDB部署、原理和使用介绍
    从MySQL架构到TiDB数据库分类​介绍TiDB数据库之前,先引入使用场景。如今的数据库种类繁多,RDBMS(关系型数据库)、NoSQL(NotOnlySQL)、NewSQL,在数据库领域均有一席之地,可谓百家争鸣之势。那么为什么要使用TiDB呢?接下来就从最熟悉的MySQL的使用说起。MySQL痛点​假设现在有一个高速......
  • ChromeOptions 参数介绍
    在使用selenium浏览器渲染技术,爬取网站信息时,默认情况下就是一个普通的纯净的chrome浏览器,而我们平时在使用浏览器时,经常就添加一些插件,扩展,代理之类的应用。相对应的,当我们用chrome浏览器爬取网站时,可能需要对这个chrome做一些特殊的配置,以满足爬虫的行为。1.chromeOptions......
  • HTML开发工具和环境介绍,内附超详细的VS code安装教程!
    工欲善其事必先利其器,一款好的开发工具可以让我们事半功倍。前面我们对HTML的相关概念和基本结构已经有了基本的了解,下面我们就来安装在前端开发中的需要使用的开发工具及环境。在众多HTML编辑器中,选择一个适合自己的工具至关重要。今天我们就来认识一下前端开发工作中使用的最广......
  • 介绍一个很不错的 php 加密工具 - XLoad 扩展加密工具
    对于PHP开发者来说,代码安全变得越来越重要,选择一个可靠的加密工具是保护代码完全的关键。今天,我要向大家介绍一款非常出色的PHP加密工具-XLoad扩展加密工具。XLoad扩展加密工具是一款强大、安全、而易用的加密软件,它为PHP开发者提供了高效、安全的加密解决方案。这款工......
  • locks包下面类介绍
    locks包的描述https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/package-summary.htmlLock接口https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html简介:通过加锁/释放锁可以实现类似于synchronized关键词实现的互斥和同步访问......