`

Hbase的RPC通信机制@转载

 
阅读更多

HBase采用了和Hadoop相同的RPC机制,作为它的主要通信手段.这是一个轻量的,不同于Java标准的RMI的一种方式.所以它的实现必须克服一些问题.如:

1)      如何分配RPC角色和通信信道,使得RPC通信可以实现.

2)      通信接口或协议的内容

3)      如何传输对象(Object),即序列化.

4)      传输,并发及会话控制

5)      其它的保障,如出错,重试等.

对于第一个问题,首先要确定RPC通信的角色.请参看下表.

HBase通信信道 HBase的通信接口
客户端 服务端
HBase Client Master Server HMasterInterface
HBase Client Region Server HRegionInterface
Region Server Master Server HMasterRegionInterface

HBase RPC有明显的客户端和服务端之分.由HBase Client,Region server, Master server三者组成了三个信道.最右边的一列是通信两端之间约定的通信接口.客户端调用这个接口,而服务端实现这个接口.

所以最基本的工作流程就是

1)      客户端取得一个服务端通信接口的实例.

2)      客户端调用这个实例中的方法

3)      客户端向服务端传输调用请求

4)      服务端接口实现被调用

5)      服务端向客户端传输结果

那么除此之外的通信是不存在的吗?比如Master向Region server发出请求.答案是—否,原因很简单,一个Master server的实例也可以以HBase Client的角色来访问Region Server,即调用它的HRegionInterface接口.事实上确实如此,Master必须调用Region server的接口来完成它的工作.但是有一点可以确定的,没有Master server向Region server主动发布命令的接口,而只有Region server主动向Master server报告和获取命令的接口,即HMasterRegionInterface.

HBase解决第二个问题,要参考三个通信接口.这三者可以说是HBase架构的基因,只看这三个接口的源码,就可以让你大致了解HBase的工作思想.

1)      HMasterInterface, 由Master server实现,相当于是总管,所以它提供的方法归纳为

a)         对表的增删改的操作,及对表上线,下线的操作

b)        对表的列的增删改操作

c)         关闭这个HBase集群和取得集群的状态的方法.

说到底,Master server在前两项任务上充当了HBase Client的角色.只是它比较特别一点,因为它主要操作的是Root和Meta表.这两个表是HBase数据架构的元数据表

以下是题外话,对于HBase Client来说是如何获得这个实例呢?请参考org.apache.hadoop.hbase.client.HConnection.getMaster()这个方法.而HConnction的实例是来自org.apache.hadoop.hbase.client.HConnectionManager的getConnection()的静态方法.HConnection真正的实现是HConnectionManager.TableServers

2)      HRegionInterface, 由Region Server实现.这是HBase主要的数据操作接口.它的功能有

a)         Get 操作,读表记录的操作

b)        Put 操作,检查及Put的组合操作,列值的增值的操作,即写表记录的操作

c)         Delete 操作,删除表记录的操作

d)        Scan操作,分为打开Scanner,得下一条或多条的记录及关闭Scanner的操作

e)         行锁及解锁操作

f)         定位(查找)的操作

g)        取得本Region server上Region信息,服务器信息的操作

Region server顾名思义就是为Region服务的服务器.所以它的主体的方法都是针对一个Region的.一个Region也就是一个表的横向片断,表太大了,所以要分给不同的Region Server来管理.从HBase client的角度来说,因为一个对数据表的操作可能要跨多个Region,也就是要访问多个Region server.所以这个工作就必须由client来完成.HBase client的API就是要解决这个复杂性.

HRegionInterface的实例同样来自HConnection接口的实例HConnectionManager.TableServers.

3)      HMasterRegionInterface, 由Master server实现.它只有两个的方法,

a)         向Master server报告我启动了,Master server就回给它当前的配置,如文件系统,hbase的根目录

b)        向Master server报告状态,及管理的Region的信息,顺便从Master server取得要执行的命令.有哪些命令和报告呢,参考org.apache.hadoop.hbase.HMsg.Type.有命令: 打开,关闭,切分,压缩和停止Region;报告有Region serve打开,关闭,切分,压缩,更新,Region正退出等.

值得注意的是,我们如从CRUD(Create, Read, Update, Delete)这个角度来看这套接口,似乎是不完整的.注意HMasterInterface,它只提供了CUD三个对表的操作.哪么对表的读取在哪里呢?另一方面可以看到的是HRegionInterface指供了完整的CRUD.所以有一个潜在的方法就是对表的读取可以通过HRegionInterface对Root表及Meta表的读取来完成,事实上,HBase的客户端代码也是这样做的,它利用scanner扫描Root和Meta表来读取表的信息.

第三个问题相对比较简单,可以看到它是利用org.apache.hadoop.io.Writeable这个接口来进行序列化的,而不是通过标准的Serialize接口.Writeable接口有两个方法,分别是

1)      write(DataOutput out) 对应将数据写入流中

2)      readFields(DataInput in) 从流中读出这数据实例化这个对象.

还要一个隐含的要求,就是实现这个接口的类要有公有的无参构造器.最后会说明理由.

也就是说只要实现这个接口的类的实例就可以在HBase的RPC中传输,作为函数调用的参数z或返回值.

具体一些来说, org.apache.hadoop.hbase.io.HbaseObjectWritable是真正被传输用到的,它是一个封装器,在它的类有两个静态的表,一个是类code(一个内部分配的Byte)到类实例的映射表,还有一个是类实例到类code的映射表.在这两个表静态初始化时,将HBase中所有要传输的类(Writable),原型数据(int, boolean)及一些特别的类(Stirng, 数组)等都编成code存入这张表中.对于它的实例来说,它提供了set,get方法将一个对象存入或读出,然后按不同对象采用不同的方法来将数据存入流中或从流中读出.

重新归纳一下这个序列化的过程,

1)      Client调用RPC接口时,一些原型值,String,或Writable对象传入了前述三个接口的方法.

2)      这些参数被装入HbaseObjectWritable对象中.

3)      HbaseObjectWritable将这些对象的类code(查静态表)写入流中,并将对象实例的数据写入流中.

4)      Server将接收的参数反序列化.先生成HbaseObjectWritable实例

5)      用这个实例从流中读到类code,实例化.然后按它的类型读出它的数据.

6)      这样就可以调用HbaseObjectWritable.get()方法将这个构建出的对象取出了.

另一部分返回结果的传输与上述过程类似

请注意第5步,其中的实例化,对于Writable对象而言,必须要实现无参构造器.这样才能帮助它方便的实例化成.其实是还可以有其它实例化的方法,WritableFactory这儿就不详述了.

第四个问题和第五个问题将涉及传输的两端,将分别在客户端和服务端分别讲到.

分享到:
评论

相关推荐

    HBase源码分析

    HBase中的RPC机制与Java的RMI(远程方法调用)不同,它采用了一种轻量级的RPC机制,这种方式不依赖于Java的RMI机制,使得它能够更好地适应分布式环境下的复杂通信需求。在HBase中,RPC机制是其主要的通信手段,它...

    HBase@Taobao.pptx

    HBase@Taobao.pptx HBase@Taobao.pptx HBase@Taobao.pptx HBase@Taobao.pptx HBase@Taobao.pptx

    Elasticsearch-HBase-sep机制

    **Elasticsearch-HBase 数据同步:SEP机制详解** 在大数据处理和分析领域,Elasticsearch(ES)和HBase都是重要的存储与检索平台。Elasticsearch以其强大的全文搜索能力和实时分析性能而广受青睐,而HBase则因其...

    基于协处理器的HBase内存索引机制的研究.pdf

    "基于协处理器的HBase内存索引机制的研究" 本文研究了基于协处理器的HBase内存索引机制,以提高HBase的多条件查询速度。在大数据时代,传统的关系型数据库难以处理无规范模式的数据集,于是NoSQL数据库如HBase、...

    HbaseTemplate 操作hbase

    通过构建Put或Delete对象列表,然后一次性提交,可以减少网络通信和HBase服务器的处理压力。 8. **异常处理**:在使用HbaseTemplate时,需要注意处理可能出现的异常,如TableExistsException(表已存在)、...

    HBase的存储机制

    介绍一些hbase的底层存储机制,以更好认识hbase的原理

    基于数据冗余的HBase合并机制研究_熊安萍

    基于数据冗余的HBase合并机制研究_HBase列式数据库的所有操作均以追加数据的方式写入,导致其合并机制占用资源过多,影响系统读性能。

    Hadoop源代码分析(完整版)+HBase-Hadoop@小米

    适合具有java基础及一定linux的猿来采集,高清资料,适度下载。谢谢支持

    HBase@不睡觉书副本.rar

    《HBase@不睡觉书副本》是一本专为HBase初学者精心编写的入门教材,其高清版提供了清晰易读的阅读体验,被广大读者誉为学习HBase的最佳选择。这本书深入浅出地介绍了分布式数据库HBase的核心概念、设计原理以及实际...

    HBase开启审计日志

    随着数据安全的重要性日益凸显,HBase提供了多种安全机制来保障数据的安全性。其中,审计日志功能是记录用户对HBase进行的各种操作的重要工具,对于监控和审查系统行为非常关键。 #### 二、配置HBase审计日志 ####...

    zookeeper及hbase安装

    ### Zookeeper及HBase安装配置详解 #### 一、Zookeeper安装配置 **目标环境**: - 三台服务器:192.168.15.5(master)、192.168.15.6(slave1)、192.168.15.7(slave2) **步骤一:主机名映射** - 在每台服务器...

    [HBase]源码级强力分析hadoop的RPC机制

    这些天一直奔波于长沙和武汉之间,忙着腾讯的笔试、面试,以至于对hadoopRPC(RemoteProcedureCallProtocol,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。...

    HBase技术介绍.docx

    - **Client**: 使用HBase RPC机制与HMaster和HRegionServer通信。 - **HMaster**: 负责整个集群的管理和协调工作,包括Region分配、负载均衡等。 - **HRegionServer**: 负责处理客户端的数据读写请求,每个Region ...

    藏经阁-HBase Coprocessor-22.pdf

    3.使用 Protobuf 协议可以实现数据交换和 RPC 通信。 HBase Coprocessor 的优点: 1.提高性能:HBase Coprocessor 可以提高 HBase 的性能,例如使用 Endpoint 机制可以实现高效的数据处理。 2.灵活的扩展:HBase ...

    hbase安装与hbase架构说明

    在HBase的架构中,Client是用户与系统交互的接口,它通过远程过程调用(RPC)机制与HMaster和HRegionServer通信。对于数据读写操作,Client直接与HRegionServer交互,而对于表管理和元数据操作,Client则与HMaster...

    hbase 资源合集 hbase 企业应用开发实战 权威指南 hbase 实战 hbase 应用架构

    《HBase权威指南》则是一部全面的HBase技术手册,详细阐述了HBase的内部机制和工作原理,包括RegionServer、Zookeeper、HDFS等关键组件的工作流程。此外,还讲解了HBase的高级特性,如MapReduce、Hive、Pig等与HBase...

    hbase用于查询客户端工具

    2. **HBase REST Gateway**:REST(Representational State Transfer)接口使得非Java客户端能以HTTP协议与HBase通信,使用JSON格式交换数据。这使得Web应用、Python、Ruby等其他语言的客户端可以轻松地与HBase集成...

    藏经阁-云数据库HBase企业级安全解析.pdf

    该文档详细介绍了HBase的安全原理、安全介绍、ACL权限控制、RPC层的安全认证、HBase的WebUI支持https访问等多方面的安全机制。 HBase安全介绍 HBase是一种基于分布式的NoSQL数据库,具有高可扩展性、高性能和高...

    Hbase权威指南(HBase: The Definitive Guide)

    通过上述内容可以看出,《HBase权威指南》全面而深入地介绍了HBase的相关知识和技术要点,无论是对于初次接触HBase的新手还是想要深入了解其内部机制的资深开发者来说,都是一本不可多得的好书。该书不仅详细解释了...

Global site tag (gtag.js) - Google Analytics