HBaRPC理解之一

更新时间:2023-07-16 22:12:57 阅读: 评论:0

HBaRPC理解之⼀
RPC是hba中Master,RegionServer和Client三者之间通信交流的纽带。了解hba的rpc机制能够为通过源码学习hba奠定良好的基础。因为了解了hba的rpc机制能够很快通过debug深⼊理解hba各种机制(⽐⽅说flush,compaction,scan等请求)的流程。同时也便于碰到问题时,通过源码分析找到原因,毕竟源码⾯前了⽆秘密。
1,RPC简介
RPC(remote procedure call)即远程过程调⽤。对于本地调⽤,定义好⼀个函数以后,程序的其他部分通过调⽤该函数,就可以返回想要的结果。⽽RPC唯⼀的区别就是函数定义和函数调⽤通常位于不同的机器,因为涉及到不同的机器,所以RPC相⽐较本地函数调⽤多了通信部分。主要涉及到两个⾓⾊调⽤⽅(client端)和函数定义实现(rver端)。RPC调⽤的流程如下⾯图所⽰()。
志愿服务项目大赛
2,HBa中RPC概况
HBa中的RPC是RegionServer,Master以及Client(如Hba shell, JAVA client API)三者之间通信的纽带。RegionServer和Master作为hba rver端部分最核⼼的两个component,主要是通过提供RPC调⽤的服务来满⾜客户端的请求。当然RegionServer和Master之间服务也通过RPC来实现。
2.1, RegionServer提供的服务
干法稻盛和夫读后感通过下⾯的代码⽚段,可以看到RegionServer提供的RPC服务主要是ClientService和AdminService这两个接⼝提供的服务。
1protected List<BlockingServiceAndInterface> getServices() {
2    List<BlockingServiceAndInterface> bssi = new ArrayList<BlockingServiceAndInterface>(2);
3    bssi.add(new BlockingServiceAndInterface(
4      wReflectiveBlockingService(this),
5      ClientService.BlockingInterface.class));
6    bssi.add(new BlockingServiceAndInterface(
7      wReflectiveBlockingService(this),
8      AdminService.BlockingInterface.class));
9return bssi;
10  }
其中,ClientServices接⼝定义如下,可以看到主要是提供数据操作的接⼝(Get,Mutate,scan等等)
1 rvice ClientService {
2  rpc Get(GetRequest)
3    returns(GetRespon);
4
5  rpc Mutate(MutateRequest)老干妈拌饭
6    returns(MutateRespon);
7
8  rpc Scan(ScanRequest)
9    returns(ScanRespon);
10
11  rpc BulkLoadHFile(BulkLoadHFileRequest)
12    returns(BulkLoadHFileRespon);
13
14  rpc ExecService(CoprocessorServiceRequest)
15    returns(CoprocessorServiceRespon);
16
17  rpc ExecRegionServerService(CoprocessorServiceRequest)
18    returns(CoprocessorServiceRespon);
19
20  rpc Multi(MultiRequest)
21    returns(MultiRespon);
22 }
AdminService的服务定义如下, 可以看到主要提供hba表管理相关的操作,region的合并,split等等。
1 rvice AdminService {
2  rpc GetRegionInfo(GetRegionInfoRequest)
3    returns(GetRegionInfoRespon);
4
5  rpc GetStoreFile(GetStoreFileRequest)
6    returns(GetStoreFileRespon);
7
8  rpc GetOnlineRegion(GetOnlineRegionRequest)
9    returns(GetOnlineRegionRespon);
10
11  rpc OpenRegion(OpenRegionRequest)
12    returns(OpenRegionRespon);
13
14  rpc WarmupRegion(WarmupRegionRequest)
15    returns(WarmupRegionRespon);
16
17  rpc CloRegion(CloRegionRequest)
18    returns(CloRegionRespon);
19
20  rpc FlushRegion(FlushRegionRequest)
21    returns(FlushRegionRespon);
22  ...52 }
2.2, Master提供的服务
通过下⾯的代码⽚段,可以看到Master主要四个接⼝的服务。MasterService和RegionServerStatusService,以及Services()就是ClientServices和AdminService。
1protected List<BlockingServiceAndInterface> getServices() {
2    List<BlockingServiceAndInterface> bssi = new ArrayList<BlockingServiceAndInterface>(4);
3    bssi.add(new BlockingServiceAndInterface(
4      wReflectiveBlockingService(this),
5      MasterService.BlockingInterface.class));
6    bssi.add(new BlockingServiceAndInterface(
7      wReflectiveBlockingService(this),
8      RegionServerStatusService.BlockingInterface.class));
9    bssi.Services());
10return bssi;
11  }
MasterService的服务定义部分如下, 可以看到主要提供表DML相关的服务。
1 rvice MasterService {
2/** Ud by the client to get the number of regions that have received the updated schema */
3  rpc GetSchemaAlterStatus(GetSchemaAlterStatusRequest)
4    returns(GetSchemaAlterStatusRespon);
5
6/** Get list of TableDescriptors for requested tables. */
7  rpc GetTableDescriptors(GetTableDescriptorsRequest)
8    returns(GetTableDescriptorsRespon);
9
10/** Get the list of table names. */
11  rpc GetTableNames(GetTableNamesRequest)
春节联欢晚会重播12    returns(GetTableNamesRespon);
13
14/** Return cluster status. */
15  rpc GetClusterStatus(GetClusterStatusRequest)
瓦合16    returns(GetClusterStatusRespon);
17
18/** return true if master is available */
19  rpc IsMasterRunning(IsMasterRunningRequest) returns(IsMasterRunningRespon);
20
21/** Adds a column to the specified table. */
22  rpc AddColumn(AddColumnRequest)
23    returns(AddColumnRespon);
24
花开花败25/** Deletes a column from the specified table. Table must be disabled. */
26  rpc DeleteColumn(DeleteColumnRequest)
人口最多的国家是27    returns(DeleteColumnRespon);
28
29/** Modifies an existing column on the specified table. */
30  rpc ModifyColumn(ModifyColumnRequest)
31    returns(ModifyColumnRespon);
32
33/** Move the region region to the destination rver. */
34  rpc MoveRegion(MoveRegionRequest)
35    returns(MoveRegionRespon);
36  ...236 }
⽽RegionServerStatusService主要是与regionrver状态有关的接⼝。
1 rvice RegionServerStatusService {
2/** Called when a region rver first starts. */
3  rpc RegionServerStartup(RegionServerStartupRequest)
4    returns(RegionServerStartupRespon);
5
6/** Called to report the load the RegionServer is under. */
7  rpc RegionServerReport(RegionServerReportRequest)
8    returns(RegionServerReportRespon);
9
10/**
孔子弟子排名
11  * Called by a region rver to report a fatal error that is causing it to
12  * abort.
13*/
14  rpc ReportRSFatalError(ReportRSFatalErrorRequest)
15    returns(ReportRSFatalErrorRespon);
16
17/** Called to get the quence id of the last MemStore entry flushed to an
18  * HFile for a specified region. Ud by the region rver to speed up
19  * log splitting. */
20  rpc GetLastFlushedSequenceId(GetLastFlushedSequenceIdRequest)
21    returns(GetLastFlushedSequenceIdRespon);
22
23/**
24  * Called by a region rver to report the progress of a region
25  * transition. If the request fails, the transition should
26  * be aborted.
27*/
28  rpc ReportRegionStateTransition(ReportRegionStateTransitionRequest)
29    returns(ReportRegionStateTransitionRespon);
30 }
3,HBa中RPC的总体框架
hba中rver中有关rpc的类和成员的之间的包含和继承关系如下图所⽰:
从上图可以看到Master继承了HRegionServer,⽽在HRegionServer中包含了rpcServices,具体点对于HRegionServer对应为RSRpcServices,⽽HMaste对应MasterRpcServices。⽽RSRpcServices中包含了RpcServer,这个类主要⽤来服务rpc。其中Listener负责监听请求,对于获取到的请求,交由Reader负责读取,Resonder负责发送rpc请求结果,⽽RpcScheduler负责任务的调度。关于Listener,Responder,Reader和Scheduler之间的流程,稍后再详谈。
4,⼩结
这⾥主要对hba rpc部分做了⼀个宏观的认识,包括rpc介绍,rpc提供的服务以及rpc在hba源码中
的相关类和对象的集成和包含关系。通过整理这些,对hba的rpc有了概括性的了解。接下来会对rver端和client端rpc的过程做更详细的介绍。

本文发布于:2023-07-16 22:12:57,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1100345.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:负责   请求   提供   函数   源码   服务   定义   包含
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图