【hadoop】 2005-RPC协议
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1、RPC: 远程调用协议。不同进程之间的远程方法调用。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
例如: 不同系统之间的交互,如WebService
2、以NameNode和DataNode通信为例来说明节点之间的调用
3、通过实例演示RPC通信过程
3.1 新建RPCServer
3.2 新建RPCClient
3.3 RPCServer和RPCClient分布在不同的进程下
3.4 借助Hadoop的RPC工具类实现
3.5 RPCServer 和RPCClient 分别部署到不同的机器上,然后运行RPCServer ,在通过RPCClient远程调用
package rpc;
/**
*
* @author shenfl
*
*/
public interface ServerProtocol{
public static final long versionID = 9876L;
public String findMetaData(String
fileName
);
}
package rpc;
import java.io.IOException;
import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Server;
/**
*
* @author shenfl
*
*/
public class RPCServer
implements ServerProtocol {
@Override
public String findMetaData(String
fileName
) {
System. out
.println(
"find Meta in NameNode!"
);
return fileName
+
" already is found, "
+
fileName
+ ", 3,{blk_001,blk_002}"
;
}
public static void main(String[]
args
)
throws HadoopIllegalArgumentException, IOException {
/**
* use jdk proxy
*/
Server server
=
new RPC.Builder(
new Configuration()).setInstance(
new RPCServer())
.setProtocol(ServerProtocol. class
)
.setBindAddress( "192.168.2.31"
)
.setPort(9999).build();
server
.start();
}
}
package rpc;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
/**
* @author shenfl
*
*/
public class RPCClient {
public static void main(String[]
args
)
throws IOException {
int port
= 9999;
String hostName
=
"192.168.2.31"
;
/**
* get proxy object by hostName and port
*/
ServerProtocol proxy
= RPC. getProxy(ServerProtocol. class
, 9876L,
new InetSocketAddress(
hostName
,
port
),
new Configuration());
/**
* call real method
*/
String metaData
=
proxy
.findMetaData(
"/readme01.txt"
);
System. out
.println(
metaData
);
RPC. stopProxy( proxy
);
}
}
4、采用图模式描述RPC的远程方法调用
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |