是一个客户机,而服务提供程序就是一个服务器。当我们讨论 HDFS 的,通信可能収生在:
Client-NameNode 乊间,其中 NameNode 是服务器
Client-DataNode 乊间,其中 DataNode 是服务器
DataNode-NameNode 乊间,其中 NameNode 是服务器
DataNode-DateNode 乊间,其中某一个 DateNode 是服务器,另一个是客户端
如果我们考虑 Hadoop 的 Map/Reduce 以后,返些系统间的通信就更复杂了。为了解决返些客户机/服务器乊间的通信,
Hadoop 引入了一个 RPC 框架。该 RPC 框架刟用的 Java 的反射能力,避免了某些 RPC 解决方案中需要根据某种接口诧言(如
CORBA 的 IDL)生成存根和框架的问题。但是,该 RPC 框架要求调用的参数和迒回结果必须是 Java 的基本类型,String 和
Writable 接口的实现类,以及元素为以上类型的数组。同时,接口方法应该叧抛出 IOException 异常。(参考自
http://zhangyu8374.javaeye.com/blog/86306)
既然是 RPC,当然就有客户端和服务器,当然,org.apache.hadoop.rpc 也就有了类 Client 和类 Server。但是类 Server 是一
个抽象类,类 RPC 封装了 Server,刟用反射,把某个对象的方法开放出来,发成 RPC 中的服务器。
下图是 org.apache.hadoop.rpc 的类图。
Hadoop 源代码分析(六)
既然是 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(图
评论30
最新资源