加入收藏 | 设为首页 | 会员中心 | 我要投稿 均轻资讯网 (https://www.junqingwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

HBase原理(一):架构理解

发布时间:2022-11-17 10:46:20 所属栏目:大数据 来源:
导读:  每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。

  放弃不难,但坚持很酷~

  版本说明:

  通过 HDP 3.0.1 安装的 HBase 2.0.0

  一、概述

  Apache HBase是基于Hadoo
  每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。
 
  放弃不难,但坚持很酷~
 
  版本说明:
 
  通过 HDP 3.0.1 安装的 HBase 2.0.0
 
  一、概述
 
  Apache HBase是基于Hadoop构建的一个分布式的、可伸缩的海量数据存储系统。常被用来存放一些海量的(通常在TB级别以上)、结构比较简单的数据,如历史订单记录,日志数据,监控Metris数据等等,HBase提供了简单的基于Key值的快速查询能力。
 
  HBase实际上更像是“数据存储”而不是“数据库”,因为它缺少RDBMS中找到的许多功能,例如二级索引,触发器和高级查询语言等。
 
  但是 HBase具备许多RDBMS没有的功能:
 
  HBase并不适合所有场景。 首先,确保您有足够的数据。如果你有数亿或数十亿行,那么HBase是一个很好的候选者。如果你只有几千/百万行,那么使用传统的RDBMS可能是一个更好的选择。
 
  二、整体架构
 
  先简单说一下 HBase的整体架构, 一般一个HBase集群由一个Master服务和几个RegionServer服务组成。Master服务负责维护表结构信息;实际的数据都存储在RegionServer上,最终RegionServer保存的表数据会直接存储在HDFS上。
 
  1. HBase Master
 
  HBase的管理节点,通常在一个集群中设置一个主Master,一个备Master,主备角色的"仲裁"由ZooKeeper实现。HBase Master的主要职责有(参考的HBase官网):
 
  HBase有一点很特殊:客户端获取数据由客户端直连RegionServer的,所以你会发现Master挂掉之后你依然可以查询数据,但不能新建表了。这也从侧面说明HBase不像HDFS强依赖于NameNode那样依赖Master,Master与RegionServer各有各的分工。
 
  2. RegionServer
 
  负责服务和管理 Region。在分布式集群中,建议RegionServer与DataNode按1:1比例安装,这种部署的优势在于:RegionServer中的数据文件可以存储一个副本于本机的DataNode节点中,从而在读取时可以利用HDFS中的"短路径读取(Short Circuit)"来绕过网络请求,降低读取时延。
 
  RegionServer的主要职责有(参考的HBase官网):
 
  3. Zookeeper
 
  ZooKeeper存储着hbase:meta信息。hbase:meta表记录着HBase中所有Region的相关信息。
 
  所以 RegionServer非常依赖Zookeeper服务,可以说没有Zookeeper就没有HBase。Zookeeper在HBase中扮演的角色类似一个管家。ZooKeeper管理了HBase所有RegionServer的信息,包括具体的数据段存放在哪个RegionServer上。
 
  大数据培训机构大数据培训_大数据激活女人经济 36大数据_理解大数据
 
  客户端会与 RegionServer通信。每次与HBase连接,其实都是先与ZooKeeper通信,查询出哪个RegionServer需要连接,然后再连接RegionServer。
 
  4. HDFS
 
  由于 HBase在HDFS上运行(并且每个StoreFile(也就是HFile) 都作为HDFS上的文件写入),因此了解HDFS架构非常重要,尤其是在存储文件,处理故障转移和复制块方面。
 
  NameNode
 
  NameNode负责维护文件系统元数据。
 
  DataNode
 
  DataNode负责存储HDFS块,也就是真实数据。
 
  最终的 HBase相关架构图如下图所示:
 
  三、RegionServer内部探险
 
  HBase RegionServer:负责数据的读取和写入。一个RegionServer里面包含一个WAL与 一个或多个Region。当数据量小的时候,一个Region足以存储所有数据;但当数据量大的时候,RegionServer会拆分Region,通知Hbase Master将多个region分配到一个或多个RegionServer中。
 
  从这张图上我们可以看出一个 RegionServer包含有:
 
  1. 一个WAL
 
  预写日志,WAL是Write-Ahead Log的缩写。从名字就可以看出它的用途,就是:预先写入。是RegionServer在处理数据插入和删除的过程中用来记录操作内容的一种日志。
 
  当操作到达 Region的时候,RegionServer先不管三七二十一把操作写到WAL里面去,再把数据放到基于内存实现的Memstore里,等数据达到一定的数量时才刷写(flush)到最终存储的HFile内。在一个regionServer上的所有的Region都共享一个WAL。
 
  而如果在这个过程中服务器宕机或者断电,那么数据就丢失了。WAL是一个保险机制,数据在写到MemStore之前,先被写到WAL了。这样当故障恢复的时候可以从WAL中恢复数据。
 
  2. 多个Region
 
  Region相当于一个数据分片。它采用了"Range分区",将Key的完整区间切割成一个个的"Key Range" ,每一个"Key Range"称之为一个Region。每一个Region都有 起始rowkey和 结束rowkey,代表了它所存储的row范围。
 
  也可以这么理解:将 HBase中拥有数亿行的一个大表,横向切割成一个个"子表",这一个个"子表"就是Region。Region是HBase中负载均衡的基本单元,当一个Region增长到一定大小以后,会自动分裂成两个(Region有分裂策略,本篇文章不涉及)。
 
  我创建了一个表,内含5个 Region,Master将Region分配到了两个RegionServer中,如下图所示:
 
  这也从侧面表明:一个表中的数据,会被分配到一个或多个Region中存储,而Region受HBase Master管控,被分配到一个或多个RegionServer中。
 
  接下来我们来看单个 Region内部结构,如下图所示:
 
  该图片来源于HBase不睡觉书
 
  每一个 Region内都包含有多个Store实例。一个Store对应一个列族的数据,如果一个表有两个列族,那么在一个Region里面就有两个Store。
 
  在最右边的单个 Store的解剖图上,我们可以看到Store内部有MemStore和HFile这两个组成部分。
 
  2.1 MemStore
 
  MemStore:数据被写入WAL之后就会被加载到MemStore中去。每个Store里面都只有一个MemStore,用于在内存中保存数据。MemStore的大小增加到超过一定阈值的时候就会被刷写到HDFS上,以HFile的形式被持久化起来。
 
  2.2 HFile
 
  HFile(StoreFile):HFile是数据存储的实际载体,我们创建的所有表、列等数据最终都存储在HFile里面。我在HFile后面的括弧里面写了StoreFile理解大数据,意思是你在很多资料中经常会看到管HFile叫StoreFile。其实叫HFile或者StoreFile都没错,HBase是基于Java编写的,那么所有物理上的东西都有一个对象跟它对应,在物理存储上我们管MemStore刷写而成的文件叫HFile,StoreFile就是HFile的抽象类而已。
 
  假如有一个数据量巨大的表,那么 Region相当于将这表横向切割,列族又将表纵向切割。如下图所示,每个Region都有两个列族,也就对应着两个Store。
 

(编辑:均轻资讯网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!