设为首页 收藏本站
查看: 576|回复: 0

[经验分享] hadoop源码研读之路(四)----IPC.RPC

[复制链接]
发表于 2016-12-10 10:41:41 | 显示全部楼层 |阅读模式
  写这篇文章的时候比较吃力,因为我也不知道什么是IPC,基础知识太薄弱了。
  进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。这些进程可以运行在同一计算机上或网络连接的不同计算机上。
进程间通信技术包括消息传递、同步、共享内存和远程过程调用。

  远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。

  为什么要用RPC呢?举个例子:当客户端要访问服务端数据时就无需每次拷贝整个数据库或它的大部分程序到客户端系统。其实,服务端只处理请求,甚至只执行一些数据计算,把得出的结果再发送给客户端。因为当数据存放在一个地方时,数据库同步很容易实现,所以多个客户端可同时访问相同的数据。
  Hadoop的RPC主要是通过Java的动态代理(Dynamic Proxy)与反射(Reflect)实现,源代码在org.apache.hadoop.ipc下,有以下几个主要类:

  Client:RPC服务的客户端
RPC:实现了一个简单的RPC模型
Server:服务端的抽象类
RPC.Server:服务端的具体类
VersionedProtocol:所有的使用RPC服务的类都要实现该接口,在创建代理时,用来判断代理对象是否创建正确。
  1)HDFS相关
ClientDatanodeProtocol:client与datanode交互的接口,操作不多,只有一个block恢复的方法。那么,其它数据请求的方法呢?client与datanode主要交互是通过流式的socket实现,源码在DataXceiver,在这里先不说了;
ClientProtocol:client与Namenode交互的接口,所有控制流的请求均在这里,如:创建文件、删除文件等;
DatanodeProtocol:Datanode与Namenode交互的接口,如心跳、blockreport等;
NamenodeProtocol:SecondaryNode与Namenode交互的接口。
2)Mapreduce相关
InterDatanodeProtocol:Datanode内部交互的接口,用来更新block的元数据;
InnerTrackerProtocol:TaskTracker与JobTracker交互的接口,功能与DatanodeProtocol相似;
JobSubmissionProtocol:JobClient与JobTracker交互的接口,用来提交Job、获得Job等与Job相关的操作;
TaskUmbilicalProtocol:Task中子进程与母进程交互的接口,子进程即map、reduce等操作,母进程即TaskTracker,该接口可以回报子进程的运行状态(词汇扫盲: umbilical 脐带的, 关系亲密的) 。
3)其它
AdminOperationProtocol:不用用户操作的接口,提供一些管理操作,如刷新JobTracker的node列表;
RefreshAuthorizationPolicyProtocol,RefreshUserMappingsProtocol:暂不明白。

  3、RPC方法
RPC提供了一个简单的RPC机制,提供以下几种静态方法:
1)***Proxy
waitForProxy、getProxy、stopProxy均是与代理有关的方法,其中wait需要保证namenode启动正常且连接正常,主要由SecondayNode、Datanode、JobTracker使用。
stop方法即停止代理。
get则是一般的获取代理的方法, 创建代理实例,获得代理实例的versioncode,再与getProxy方法传入的versioncode做对比,相同返回代理,不同抛出VersionMismatch异常。
2)getServer
创建并返回一个Server实例,由TaskTracker、JobTracker、NameNode、DataNode使用。
3)call
静态方法,向一系列服务器发送一系列请求,在源码中没见到那个类使用该方法。但注释提到了:Expert,应该是给系统管理员使用的接口。
4、RPC静态类
RPC方法仅仅提到了方法的作用,但是具体实现没说,具体实现就涉及到了RPC的静态类了,RPC类中有5个静态内部类,分别为:
RPC.ClientCache:用来缓存Client对象;
RPC.Invocation:每次RPC调用传的参数实体类,其中Invocation包括了调用方法(Method)和配置文件;
RPC.Invoker:具体的调用类,采用Java的动态代理机制,继承自InvocationHandler,有remoteId和client成员,id用以标识异步请求对象,client用以调用实现代码;
RPC.Server:org.apache.hadoop.ipc.Server的具体类,实现了抽象类的call方法,获得传入参数的call实例,再获取method方法,调用即可。用的是反射机制,反射很绝,再没使用之前,完全不知道该代码会怎么执行;
RPC. VersionMismatch:版本不匹配异常。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312290-1-1.html 上篇帖子: hadoop分析之四:关于hadoop namenode的双机热备份方案 下篇帖子: Hadoop深入学习:MapReduce中的心跳机制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表