hadoop 远程调度总结

原创
2017/05/08 10:18
阅读数 37

简介

通过前几篇博客,深入了解了hadoop rpc调度的一些流程,但是那些都太细节了,没有一个整体的架构情况。知识比较零散,需要一次系统整理和总结。下边是我自己整理的情况,肯定有很多不足之处,希望有人一起学习,一个人读源码还是很痛苦的,有人一起学习才好玩。

rpc client 总结

rpc获取代理对象流程

RPC获取代理对象

  1. rpc.getProxy() 程序入口,开始获取代理对象,需要传入代理对象接口,接口版本ID,远程服务地址和端口,以及配置

  2. 获取一个服务代理的封装,这个对象封装了

    • protocol 代理对象接口
    • proxy 动态代理获取的对象
    • supportServerMethodCheck 是否检查服务端是否支持调用的方法

    getProxy()返回了这个对象封装的代理对象。

  3. 获取rpc引擎。这个接口有两个实现类

    • WritableRpcEngine 处理用hadoop writable 序列化的rpc请求
    • ProtobufRpcEngine 处理用Protobuf序列化的rpc请求

这里我们只分析了WritableRpcEngine对象,这个类主要成员变量: - CLIENTS - client缓存

主要方法: - getProxy() 通过动态代理获取代理对象并且封装成ProtocolProxy对象 - getServer() 获取服务对象 - getClient() 获取client对象

这里主要通过getProxy()方法获取ProtocolProxy对象。但是在通过动态代理获取proxy时 这里偷偷new了一个Invoker对象,这是个前边忽略了的对象,这个对象主要用在当客户调用方法是,被调用的方法会通过整理,调用到Invoker.invoke()方法。下边我们详细分析一下这个对象。 4. Invoker对象
主要成员变量 - private Client.ConnectionId remoteId - private Client client; - private boolean isClosed = false; - private final AtomicBoolean fallbackToSimpleAuth;

主要方法 - invoke方法
通过client调用call方法发送rpc请求

server端服务过程

1. listener    接受rpc请求
2. handle    处理请求
3. responder    返回请求结果

这个三个类都实现了runnable接口,以线程的方式运行,handler可能有多个线程同时处理请求。

展开阅读全文
打赏
1
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
1
分享
返回顶部
顶部