Hadoop之——再谈Hadoop的PRC机制
来源:互联网 发布:聊天软件遇见 编辑:程序博客网 时间:2024/06/07 04:53
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52665398
今天,我们重温一下Hadoop的RPC机制,同样的,我们还是基于之前的示例程序为大家讲解Hadoop的RPC机制,那我们直接进入正题吧。
被调用方(也可称为服务端)的业务代码中必须有一个接口,而业务的具体实现写在 此接口的实现类中(jdk的动态代理必须要有接口的),而通过org.apache.hadoop.ipc.RPC(在hadoop-common-2.2.0.jar包中)的一系列方法来发布服务供调用方调用:
LoginService接口:
public interface LoginService { public static final long versionID = 1L; public String login(String username, String password); }注意,接口中要指定静态的、final的成员变量versionID,否则到时候客户端调用的时候会报异常。
接口实现类LoginServiceImpl:
public class LoginServiceImpl implements LoginService { public String login(String username, String password) { return username + " logged in successfully"; } }接口实现类只需重写接口的方法。
启动服务的代码,需要写在某个类的main方法中,任意类,甚至可以是上述接口实现类:
public static void main(String[] args) throws HadoopIllegalArgumentException, IOException { Builder builder = new RPC.Builder(new Configuration()); builder.setBindAddress("192.168.1.6").setPort(10000).setProtocol(LoginService.class) .setInstance(new LoginServiceImpl()); builder.build().start(); }首先是创建了一个org.apache.hadoop.ipc.RPC的内部类Builder的实例(构造方法Builder(Configuration config),此Configuration类是org.apache.hadoop.conf.Configuration,也在hadoop-common.jar包中,此处只需new出来一个Configuration对象即可),然后用这个实例设置一些必须的属性(socket通信的服务端设置的属性),有ip地址、端口号、协议(这里的协议指的就是接口)、接口实例(即接口实现类对象)。最后,调用Builder实例的build()方法得到org.apache.hadoop.ipc.RPC.Server对象,调动该Server对象的start()方法即启动了服务,或者说是发布了服务。
调用方(也可以称为客户端)也必须有和服务端一样的一个接口,代码一致,且所在包也需得一致(实测如果包名不一致的话,会报org.apache.hadoop.ipc.RpcServerException): Unknown protocol 异常):
LoginService接口:public interface LoginService { public static final long versionID = 1L; public String login(String username, String password); }调用服务代码
@Test public void test1() throws IOException { LoginService proxy = RPC.getProxy(LoginService.class, 1L, new InetSocketAddress("192.168.1.6", 10000), new Configuration()); String result = proxy.login("liuyazhuang", "123"); System.out.println(result); }
主要就是利用org.apache.hadoop.ipc.RPC的getProxy(Class<T> protocol,long clientVersion,InetSocketAddress addr, Configuration conf)方法(此方法里的protocol也就是接口,clientVersion也就是接口代码中配置的versionID的值,InetSocketAddress实例可以通过InetSocketAddress(String hostname, int port)构造器new出来。)获得接口对象(其实是个代理对象),然后调用此对象的业务方法的效果就等同于直接调服务端业务方法的效果一样。至此,就完成了Hadoop的RPC。
- Hadoop之——再谈Hadoop的PRC机制
- hadoop中的PRC框架使用
- Hadoop之——HDFS的RPC机制
- Hadoop学习笔记—3.Hadoop RPC机制的使用
- Hadoop学习笔记—3.Hadoop RPC机制的使用
- Hadoop学习笔记—3.Hadoop RPC机制的使用
- 【hadoop之翊】——伪分布式的hadoop配置
- 《Hadoop基础教程》之初识Hadoop——讲的很好
- hadoop 的 Metrics机制
- Hadoop的RPC机制
- Hadoop 的安全机制
- Hadoop的回收机制
- hadoop的容错机制
- hadoop的RPC机制
- Hadoop的HA机制
- HADOOP的RPC机制
- hadoop_5 : Hadoop的机制
- Hadoop的HDFS机制
- 很喜欢CSDN这个社区,所以来安家了
- PCB布线技巧(经验)
- 最小的K个数
- 机器学习系列(12)_XGBoost参数调优完全指南(附Python代码)
- LeetCode Combination Sum II
- Hadoop之——再谈Hadoop的PRC机制
- 北京网赛I题 hiho1391 (树状数组、区间覆盖最大值问题)
- 任务3 理解Task
- 如何设计出让人眼前一亮的交互框架?
- 【编程素质】代码注释
- 搭建一个App框架及相应的源码分析(EventBus+RxJava+Rxtrofit+OkHttp+Dagger2)及三方SDK等
- Python--第3天:一大波金融Library来袭之numpy篇
- 开发记录——EXCEL导出
- Spring4 & Swagger2