码迷,mamicode.com
首页 > 其他好文 > 详细

Hadoop技术内幕HDFS-笔记6之RPC

时间:2014-07-01 11:58:14      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:blog   http   java   文件   2014   os   

1.1.  hadoop远程过程调用

1、  远程接口调用(必须实现VersionedProtocol接口)

里面有一个方法,IPC通信时会比较客户端和服务端接口的版本号。必须一致才可以

package rpc;

import org.apache.hadoop.ipc.VersionedProtocol;

public interface MyBizable extends VersionedProtocol {
	//必须具有一个版本号
	public static final long VERSION = 100L;
	//实际调用方法
	public abstract String hello(String name);
}

 

2、  定义远程对象的实现类

package rpc;

import java.io.IOException;

public class MyBiz implements MyBizable{
	//获取版本号
	@Override
	public long getProtocolVersion(String protocol, long clientVersion)
			throws IOException {
		// TODO Auto-generated method stub
		return VERSION;
	}
	@Override
	public String hello(String name){
		System.out.println("我被调用了");
		return "hello:" + name;
	}
}

 

3、  构建服务器

package rpc;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

import org.apache.hadoop.ipc.RPC.Server;

 

public class MyServer {

         public static final String SERVER_ADDRESS = "localhost";

         public static final int SERVER_PORT = 12344;

         public static void main(String[] args) throws Exception {

                   //public static Server getServer(final Object instance, final String bindAddress, final int port, Configuration conf)

             /** Construct an RPC server.

              * @param instance the instance whose methods will be called客户端调用远程接口

              * @param bindAddress the address to bind on to listen for connection监听连接地址

              * @param port the port to listen for connections on端口

              * @param conf 配置文件

              */

                   final Server server = RPC.getServer(new MyBiz(), SERVER_ADDRESS, SERVER_PORT, new Configuration());

                   server.start();

         }

}

4、客户端实现

package rpc;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.VersionedProtocol;

public class MyClient {
	
	public static void main(String[] args) throws Exception {
		/** Construct a client-side proxy object that implements the named protocol,
		   * talking to a server at the named address. */
		final MyBizable proxy = (MyBizable) RPC.waitForProxy(MyBizable.class
              , MyBizable.VERSION
              , new InetSocketAddress(MyServer.SERVER_ADDRESS, MyServer.SERVER_PORT)
              , new Configuration()); //普通测试 String result = proxy.hello("hello"); System.out.println(result); RPC.stopProxy(proxy); } }

 

原理:(暂且不关注,在需要的时候可以再复习)

bubuko.com,布布扣

总结:hadoop的namenode,secondarynamenode,datanode,jobtrack等进程都实现了远程调用接口,也就是说他们每一个都是一个服务端Server,等待客户端的调用。相互之间彼此充当客户端和服务端的角色。

启动hadoop实际上就是启动了RPC的Server。

Hadoop技术内幕HDFS-笔记6之RPC,布布扣,bubuko.com

Hadoop技术内幕HDFS-笔记6之RPC

标签:blog   http   java   文件   2014   os   

原文地址:http://www.cnblogs.com/jsunday/p/3817467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!