HDFS 的底层通信原理采用的是: RPC 和 动态代理对象 Proxy。
RPC(Remote Procedure Call)
-
什么是 RPC?
Remote Procedure Call,远程过程调用。也就是说,调用过程代码并不是在调用者本地运行,而是要实现调用者与被调用者两地之间的连接与通信。
RPC 的基本通信模型是基于 Client/Server 进程间相互通信模型的一种同步通信形式;它对 Client 提供了远程服务的过程抽象,其底层消息传递操作对 Client 是透明的。
在 RPC 中,Client 是请求服务的调用者(Caller),而 Server 则是被 Client 的请求调用的程序(Callee)
-
RPC 实例:
服务器端:
1.服务接口:
import org.apache.hadoop.ipc.VersionedProtocol; /** * @author 曲健磊 * @date 2018-11-26 16:51:45 * @description 对外提供的服务 */ public interface MyInterface extends VersionedProtocol { /** * 服务的版本号 */ public static long versionID = 1; /** * 定义客户端可以调用的方法 * @param name 名称 * @return */ public String sayHello(String name); }
PS:要注册到 Hadoop 提供的 RPC 服务端上的服务必须继承 VersionedProtocol。
2.服务的具体实现:
import org.apache.hadoop.ipc.ProtocolSignature; import java.io.IOException; /** * @author 曲健磊 * @date 2018-11-26 16:55:04 */ public class MyInterfaceImpl implements MyInterface { @Override public long getProtocolVersion(String s, long l) throws IOException { // 返回该实现类的版本号 return MyInterface.versionID; } @Override public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException { // 返回RPC协议的签名(版本号) return new ProtocolSignature(MyInterface.versionID, null