Hadoop源码之我见--MapReduce部分(二)--RPC调用接口

来源:互联网 发布:sql安装重启失败 编辑:程序博客网 时间:2024/05/22 15:21


Job类中实现了InvocationHandler 接口的是 Invoker, 这种语法是java语言对代理模式的一种支持,最终对对象的调用都会成为对代理

的调用。下面看看真正的处理代理的代码Invoker。



其中factory的默认是

 

  <property>    <name>hadoop.rpc.socket.factory.class.default</name>    <value>org.apache.hadoop.net.SocksSocketFactory</value>  </property>
client是调用ClientCach类的getClient方法得到,这个类是对Client的一个缓存。之后调用client.call(...)来远程调用改方法,
其中最重要的参数是实现了Writable接口的类Invocation的一个实例,client.call(...)方法如下所示
 
Connection是一个线程,用来进行socket连接和send(call)的,这里可以看到大师写的代码是严谨的,值得学习。在call.wait之后,
调用interrupt将线程中止。
sendParams会调用NetUtils类的connect方法去连接socket的输出流,建立的tcp连接是禁止Nagle算法的,也就是NO_DELAY,方法是

 

 

 

 

原创粉丝点击