Hbase系统架构

x33g5p2x  于2021-03-14 发布在 Hbase  
字(2.5k)|赞(0)|评价(0)|浏览(549)

一、Hbase系统架构原理

:-:


(1)Hbase集群需要依赖Zookeeper集群的分布式协调服务

  • Client访问Hbase时,需要先访问Zookeeper,然后访问RegionServer。这是因为Zookeeper维护了与Hbase相关的-ROOT-表和.META表,Client访问用户数据之前需要先访问Zookeeper获取-ROOT-表的位置,然后访问-ROOT-表,然后访问.META表,获取想要的操作的Region的位置信息。
  • 从上面的架构图来看,只有一个HMaster,这在实际生产环境中是不被允许的。HMaster必须要有多个才能保证集群的高可用,有多个HMaster的情况下同一时间只有一个管事的HMaster,它是主,其他HMaster都是备。
  • 以向Hbase插入数据为例,当Client通过put语句提交Hbase SQL时,RegionServer接收这些提交信息,并记录日志信息,然后找到SQL操作的对应数据的位置即Region,Region将数据存储在内存(MemStore)和本地文件(StoreFile)中。内存中的数据会定期Flush到本地文件中,当本地文件中的数据超过阈值后,这些多出来的数据就会被写入到HDFS中。这个阈值可以在Hbase的配置文件中设置。

(2)Hbase底层依赖Hadoop集群

  • 从架构图可以看出,Hbase的底层数据存储在HDFS中,Hbase通过DFS Client将StoreFile文件写入HDFS,并依赖HDFS的分布式存储结构将文件保存多个副本。
  • RegionServer会记录有关数据库操作的日志信息,从架构图看出日志文件是保存在RegionServer中的,并会定期存储到HDFS中。
  • Hbase底层之所以需要依赖HDFS进行存储,是因为其在数据预处理、数据清洗执行MapReduce时需要将这些数据存储于HDFS之上,而基于HDFS的数据库存储结构解决了上述问题,又用到了类SQL的语言来操作数据。HDFS的多副本功能是一般数据库不具备的亮点。

(3)Hbase核心进程详解

HMaster

  • 是Master Server的实现,负责监控集群中的RegionServer实例,同时是所有metadata改变的接口,在集群中,通常运行在NameNode上面
  • HMasterInterface暴露的接口:
    • Table(createTable, modifyTable, removeTable, enable, disable)
    • ColumnFamily (addColumn, modifyColumn, removeColumn)
    • Region (move, assign, unassign)
  • Master运行的后台线程:
    • LoadBalancer线程,控制region来平衡集群的负载
    • CatalogJanitor线程,周期性的检查hbase:meta表

HRegionServer

  • 是RegionServer的实现,服务和管理Regions,集群中RegionServer运行在DataNode
  • HRegionRegionInterface暴露接口:
    • Data (get, put, delete, next, etc.)
    • Region (splitRegion, compactRegion, etc.)
  • RegionServer后台线程:
    • CompactSplitThread
    • MajorCompactionChecker
    • MemStoreFlusher
    • LogRoller

Regions

  • 代表table,Region有多个Store(列簇),Store有一个Memstore和多个StoreFiles(HFiles),StoreFiles的底层是Block

二、Hbase存储设计

在Hbase中,表被分割成多个更小的块然后分散的存储在不同的服务器上,这些小块叫做Regions,存放Regions的地方叫做RegionServer。Master进程负责处理不同的RegionServer之间的Region的分发。在Hbase实现中HRegionServer和HRegion类代表RegionServer和Region。HRegionServer除了包含一些HRegions之外,还处理两种类型的文件用于数据存储

  • HLog, 预写日志文件,也叫做WAL(write-ahead log)
  • HFile 真实的数据存储文件
HLog
  • MasterProcWAL:HMaster记录管理操作,比如解决冲突的服务器,表创建和其它DDLs等操作到它的WAL文件中,这个WALs存储在MasterProcWALs目录下,它不像RegionServer的WALs,HMaster的WAL也支持弹性操作,就是如果Master服务器挂了,其它的Master接管的时候继续操作这个文件。
  • WAL记录所有的Hbase数据改变,如果一个RegionServer在MemStore进行FLush的时候挂掉了,WAL可以保证数据的改变被应用到。如果写WAL失败了,那么修改数据的完整操作就是失败的。
  • 通常情况,每个RegionServer只有一个WAL实例。在2.0之前,WAL的实现叫做HLog
  • WAL位于/hbase/WALs/目录下
HFile
  • HFile是Hbase在HDFS中存储数据的格式,它包含多层的索引,这样在Hbase检索数据的时候就不用完全的加载整个文件。索引的大小(keys的大小,数据量的大小)影响block的大小,在大数据集的情况下,block的大小设置为每个RegionServer 1GB也是常见的。
  • Hfile生成方式:起初,HFile中并没有任何Block,数据还存在于MemStore中。Flush发生时,创建HFile Writer,第一个空的Data Block出现,初始化后的Data Block中为Header部分预留了空间,Header部分用来存放一个Data Block的元数据信息。
  • 而后,位于MemStore中的KeyValues被一个个append到位于内存中的第一个Data Block中

三、Hbase读写简要流程

:-:

相关文章