Hadoop RPC,
remote procedure call,远程过程调用
不同进程之间的方法调用
hadoop namenode、datanode等之间的通信依赖rpc
Server端
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;
public class RPCServer implements Biz{
@Override
public String sayHi(String name){
return "hi:"+name;
}
public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
Server server = new RPC.Builder(new Configuration())
.setProtocol(Biz.class)
.setInstance(new RPCServer())
.setBindAddress("192.168.1.104") //绑定的地址
.setPort(9999) //端口
.build();
server.start(); //server一个main方法,一个进程
}
}
client端
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
public class RPCClient {
public static void main(String[] args) throws IOException {
/**
* 构建客户端代理的对象
*/
Biz proxy = RPC.getProxy(Biz.class,100000, new InetSocketAddress("192.168.1.104",9999), new Configuration());
String result = proxy.sayHi("hadoop");
System.out.println(result);
RPC.stopProxy(proxy);
}
}
public interface Biz {
public static final long versionID = 100000;
public String sayHi(String name);
}
结果:
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
hi:hadoop
首先启动server,然后启动client
不同进程,不同主机上之间的服务的通信。version应该一致
扩展下
可以在一台主机启动server,另一台主机启动client,现象比较明了
需要打jar包
运行
java -jar RPCServer.jar
java -jar RPCClient.jar
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。