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

[经验分享] Hadoop 源代码分析(六)RPC-Client

[复制链接]

尚未签到

发表于 2018-10-30 10:46:39 | 显示全部楼层 |阅读模式
  既然是RPC,自然就有客户端和服务器,当然,org.apache.hadoop.rpc 也就有了类Client 和类Server。在这里我们来仔细考
  察org.apache.hadoop.rpc.Client。下面的图包含了org.apache.hadoop.rpc.Client 中的关键类和关键方法。
  由于Client 可能和多个Server 通信,典型的一次HDFS 读,需要和NameNode 打交道,也需要和某个/某些DataNode 通信。这
  就意味着某一个Client 需要维护多个连接。同时,为了减少不必要的连接,现在Client 的做法是拿ConnectionId(图中最右
  侧)来做为Connection 的ID。ConnectionId 包括一个InetSocketAddress(IP 地址+端口号或主机名+端口号)对象和一个用
  户信息对象。这就是说,同一个用户到同一个InetSocketAddress 的通信将共享同一个连接。

  连接被封装在类Client.Connection 中,所有的RPC 调用,都是通过Connection,进行通信。一个RPC 调用,自然有输入参数,
  输出参数和可能的异常,同时,为了区分在同一个Connection 上的不同调用,每个调用都有唯一的id。调用是否结束也需要
  一个标记,所有的这些都体现在对象Client.Call 中。Connection 对象通过一个Hash 表,维护在这个连接上的所有Call:
  Java 代码
  1. private Hashtable calls = new Hashtable();
  一个RPC 调用通过addCall,把请求加到Connection 里。为了能够在这个框架上传输Java 的基本类型,String 和Writable 接
  口的实现类,以及元素为以上类型的数组,我们一般把Call 需要的参数打包成为ObjectWritable 对象。
  Client.Connection 会通过socket 连接服务器,连接成功后回校验客户端/服务器的版本号(Client.ConnectionwriteHeader()方
  法),校验成功后就可以通过Writable 对象来进行请求的发送/应答了。注意,每个Client.Connection 会起一个线程,不断
  去读取socket,并将收到的结果解包,找出对应的Call,设置Call 并通知结果已经获取。
  Call 使用Obejct 的wait 和notify,把RPC 上的异步消息交互转成同步调用。
  还有一点需要注意,一个Client 会有多个Client.Connection,这是一个很自然的结果。


运维网声明 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-628384-1-1.html 上篇帖子: Hadoop和云计算的关系 下篇帖子: hadoop的源起与体系介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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