与别的RPC系统相似(主要对比Thrift) Hadoop中也分为了序列化(Transport)、函数调用(Protocol)、传输(Server)和处理(Processor)四层.
序列化层将Request与Response转成字节流便于网络传输
函数调用层
传输层描述Client和Server之间通信方式 也就是TCP Socket
处理层
Client将要调用的方法与方法的参数包装成Request发送到Server
Server接收到请求、解析Request并在Server端处理再将结果封装成Response返回给Client
想到曾经有人问过为啥Hadoop不使用开源的RPC系统 我猜是因为Hadoop项目组高手如云 显然是不屑于使用别人写的东西
org.apache.hadoop.ipc包下面的java文件就是Hadoop
Hadoop RPC Server中主要含有Listener、Responder和Handler三部分
Hadoop RPC Server中只有一个Listener作为Acceptor接受Client连接
Listener中含有一组Reader用来处理Client连接 每一个Reader即是一个线程
依顺序轮训reader数组 选出一个reader用来处理listener的事件
currentReader = (currentReader + 1) % readers.length;
return readers[currentReader];
CallQueueManager作为Hadoop RPC队列抽象,
createCallQueueInstance方法构建了BlockingQueue用来存储事件