HBase学习之HRegionServer概述

在之前博文中分析了HMaster的启动以及其在整个系统中的作用,在本篇文章中,我们将继续讨论HBase中另外一个重要的角色—-HRegionServer,文章中所涉及的相关知识点会后续更新。


**

RegionServer的功能模块分析

**

话不多说,直接上图来看一下RegionServer的整体功能图(本文的整体思路亦是按照这个功能图展开的):

HBase学习之HRegionServer概述_第1张图片

从上图可以看出RegionServer是通过RPC协议与HMaster和Client进行通信的,它们之间是如何通信的呢?

  1. RegionServer ——>HMaster
    其中Master是RPCServer端角色,RegionServer是客户端角色。通信协议是RegionServerStatusProtocol,HRegionServer向HMaster定期汇报节点的负载状况,包括RS内存使用状态、在线状态的Region等信息。
  2. Client<——>Regionser
    该过程涉及到两个协议:
    Clientprotocol:RegionServer是RPCServer端,主要实现用户的读写请求,例如:get、multiget、mutate、scan、bulkLoadHFile、执行coprocessor等。
    AdminProtocol:RegionServer是RPCServer端,主要实现Region服务、文件的管理。例如:storefile信息、region操作、WAL操作、server的开关等。

从RegionServer实现的功能上而言,除了与HMaster和Client之间的RPC通信之外,还包括如下几个重要的模块:

(1)依托ZookeeperWatcher进行的分布式信息共享与任务协调的工作。

MasterAddressTracker:捕获Master服务节点的变化。HBase使用多Master来解决Master单点故障的问题,主Master服务故障时,它与ZooKeeper的心跳延迟超过阈值,ZooKeeeper路径下的数据被清理,备Master上的ActiveMaserManager服务会竞争该Master路径,成为主Master。MasterAddresTracker是RS内部监听Master节点变化的追踪器。

ClusterStatusTracker:HBase集群状态追踪器。该选项可以标识当前集群的状态,以及它的启动时间。该设置选项有利于集群中的各个工作节点(RS)统一执行启动和退出操作。

CatalogTracker:跟踪-ROOT-、.META.表的Region的状态。在HBase支持的-ROOT-、.META.、以及User Region三层树级目录结构中,-ROOT-、.META.表用来定位Region的位置,追踪-ROOT-表和.META.表对应Region的变化,可以时刻保证整个层次目录树的完整性。

SplitLogWorker:基于Region的HLog文件切分器。在RS宕机之后,RS上的保存的HLog文件,需要按照Region进行切分。HMaster会把这些文件作为任务放置到Zookeeper的splitlog路径下,RS上SplitLogWorker会尝试获取任务,对获取到的HLog文件按照Region进行分组,处理的结果保存到相应Region的recovered.edits目录下。

(2)Region的管理

在开始之前首先说明一下RegionServer和Region之间的关系:
Region是HBase数据存储和管理的基本单位。一个表中可以包含一个或多个Region。每个Region只能被一个RS(RegionServer)提供服务,RS可以同时服务多个Region,来自不同RS上的Region组合成表格的整体逻辑视图。

RS内涉及到提供的有关Region维护的服务组件有:

MemStoreFlusher:控制RS的内存使用,有选择性地将Region的MemStore数据写入文件。该组件可以有效地控制RS的内存使用,flush文件的速度在一定程度上可以反应HBase写服务的繁忙状况。

CompactSplitThread:合并文件,清理不需要的数据,控制Region的规模。在Store内的文件个数超过阈值时,触发Compact合并文件操作,一是清理被删除的数据,二是多余版本的清理。在Region内的Store文件大小超过阈值,会触发Region的Split操作,一个Region被切分成两个Region。这两个操作都是在CompactSplitThread的各自的线程池中被触发。

CompactionChecker:周期性检查RS上的Region是否需要进行Compaction操作,确认需要进行Compaction操作的Region,提交给CompactSplitThread执行请求。

RS的内存的使用分为MemStore和BlockCache。其中MemStore提供写操作的缓存,而BlockCache是提供的读请求缓存。它们详细的内容会在后续章节中介绍。

(3)WAL的管理

HBase对于数据的更新和删除操作默认先Append到HLog文件,然后再更新到RS对应的Region上,因此,由HLog文件在RS的处理方式,被称为Write-Ahead-Log。多个Region的更新删除操作会被相继写入同一个文件,出于以下的原因,HLog文件会被截断,然后创建新HLog文件继续当前的Append操作。
HBase对于数据的更新和删除操作默认先Append到HLog文件,然后再更新到RS对应的Region上,因此,由HLog文件在RS的处理方式,被称为Write-Ahead-Log。多个Region的更新删除操作会被相继写入同一个文件,出于以下的原因,HLog文件会被截断,然后创建新HLog文件继续当前的Append操作。
1) Append操作失败,避免因底层文件系统的文件异常,阻塞数据的操作。
2) 降低存储空间的开销。当HLog上记录的数据完全从MemStore写入HDFS,此时如果多个HLog文件,有利于筛选冗余的HLog文件,提高存储空间的效率。
3) 提高分布式HLog文件切分操作(Distributed Log Split)的效率。多个HLog文件就对应同样数目的LogSplit子任务,从而可以借助多个RS的SplitLogWorker组件快速完成HLog文件的切分,尽快恢复Region的服务。
在RS内,LogRoller定期刷新出一个新的HLog文件。

(4)Metrics

Metrics对外提供了衡量HBase内部服务状况的参数。RegionServer内Metrics包含了内存使用、Region服务状况、Compaction、blockCache等一系列标识服务状况的参数。HBase Metrics继承Hadoop Metrics的实现,目前支持文件、Ganglia、以及数据流等多种输出方式,可以针对输出的Metrics信息灵活构建监控系统。

(5)HttpServer

RS内置了一个Jetty Web Server,用来对外提供RS的访问页面。访问页面目前支持实时Metrics信息查询、日志查询、线程的Dump、修改日志级别等操作。

**

RegionServer的启动过程分析

**
RegionServer服务由org.apache.hadoop.hbase.regionserver.HRegionServer类提供。该类实现了四个接口,分别是HRegionInterface,RegionServerServices,HBaseRPCErrorHandler和Runnable。其中,HRegionInterface定义了RS对外提供的RPC访问接口,通过RPCServer内置的Handler来处理请求;RegionServerServices定义了基于RS内部的服务信息接口,例如onlineRegions增、删、查接口,以及获取HLog、文件系统等接口;HBaseRPCErrorHandler定义了RPCServer异常状态检测处理接口;Runnable是Java库中的线程接口,实现该接口意味着RegionServer生命周期会运行在run()的函数体内。
RegionServer是一个独立的服务,有一个main函数在启动时被调用,main函数内通过HRegionServerCommandLine的反射机制在JVM内动态加载RegionServer实现类,并按照args解析参数情况,决定启动或者关闭RS服务。

初始化与执行过程包括:

(1)构造HRegionServer实例,初始化变量和对象。这涉及到以下重要变量初始化:

protected volatile boolean stopped = false;//关闭Server的标识,关闭过程中会置成ture 
private boolean stopping = false;//关闭Region过程的标识,是进入stopped之前的状态 
protected volatile boolean fsOk;//文件系统状态标识,false表示文件系统不可用 
private final ConcurrentSkipListMap<byte[], Boolean> regionsInTransitionInRS = 
new ConcurrentSkipListMap<byte[], Boolean>(Bytes.BYTES_COMPARATOR);//RS内处于迁移过程中的Region,其中true表示在open,false表示在close 
protected final Map onlineRegions = 
new ConcurrentHashMap();//RS内正在服务的Region 
protected final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();//修改onlineRegions对象的读写锁 
protected final int threadWakeFrequency;//工作线程服务周期间隔 
private final int msgInterval;//向Master汇报心跳,收集Metrics间隔 
private final long maxScannerResultSize;//Scanner执行next返回的数据量阈值,默认设置是Long.MAX_VALUE 
private int webuiport = -1;//webServer的端口号 
private final long startcode;//HRegiongServer初始化的时间,取自系统时间 
private ServerName serverNameFromMasterPOV;//标识Server的名字 
private final int rpcTimeout;//定义到HMaster之间的rpc超时时间

在RS上重要的对象列表,如表1所示。
表1RegionServer重要对象的解释

1、hbaseMaster

  • 对应类名:HMasterRegionInterface
  • 功能描述:RS向HMaster汇报信息,提供的RPC客户端

2、rpcServer

  • 对应类名:RpcServer
  • 功能描述:RS内的Rpc服务器

3、leases

  • 对应类名:Leases
  • 功能描述:维护客户访问的租约

4、compactSplitThread

  • 对应类名:CompactSplitThread
  • 功能描述:RS内执行Compact和Split功能组件

5、cacheFlusher

  • 对应类名:MemStoreFlusher
  • 功能描述:负责将Region的MemStore写入文件

6、compactionChecker

  • 对应类名:Chore
  • 功能描述:定期检查Region的Compaction过程

7、hlog

  • 对应类名:HLog
  • 功能描述:接收Write-Ahead-Log

8、hlogRoller

  • 对应类名:LogRoller
  • 功能描述:定期开启新的HLog文件

(2)监听服务组件的初始化与执行。
这个过程初始化以ZooKeeperWatcher为基础的服务,例如监听Master服务节点的MasterAddressManager,标识HBase集群状态的ClusterStatusTracker,以及元数据(-ROOT-, .META.)变化的监听器。启动这些服务可以保证整个集群信息协调一致。
(3)RS服务组件的初始化与执行。
这个过程是初始化compactSplitThread,cacheFlusher,compactionChecker,以及Leases。
(4)尝试连接HMaster,注册RS到HMaster。
(5)周期性收集Metrics和向Master发送心跳。

以上是对RegionServer的概述以及启动的相关整理,部分内容来自与网络博客。在下一篇内容中,将重点描述store功能及原理。

你可能感兴趣的:(Hbase)