RPC
远程过程调用(RPC):hadoop的节点之间的进程通信(类与类之间),以及与客户端的通信.心跳也是通过RPC完成的
为什么datanode定期会向Namenode汇报block信息
RPC的现实技术:动态代理,反射,socker通信生成RPC客户端
serveice
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package cn.itcast.hadoop.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.ipc.RPC.Builder; import org.apache.hadoop.ipc.RPC.Server; publci class ServiceStart{ public static void main(String[] args) throws HadoopIllegalArgumentException, IOException { Builder builder = new RPC.Builder(new Configuration()); builder.setBindAddress("cluster1").setPort(10000) .setProtocol(LoginInter.class).setInstance(new LoginServer()); Server server = builder.build(); server.start(); } }
|
1 2 3 4 5 6 7 8
| package cn.itcast.hadoop.hdfs; public class LoginServer implements LoginInter { @Override public String login(String username, String passwd) { return username + "success!!"; } }
|
client
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package cn.itcast.hadoop.hdfs; import java.io.IOException; import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; public class LoginControl { public static void main(String[] args) throws IOException { LoginInter proxy = RPC.getProxy(LoginInter.class, 1L, new InetSocketAddress("192.168.1.222",10000), new Configuration()); String r = proxy.login("femn", "femn"); System.out.println(r); } }
|
service and client
1 2 3 4 5 6
| package cn.itcast.hadoop.hdfs; public interface LoginInter { public static final long versionId=1L; public String login(String username,String passwd); }
|