Hadoop2.X中使用RPC

1.1 协议

import org.apache.hadoop.io.Text;
import org.apache.hadoop.ipc.VersionedProtocol;
public interface MyProtocol extends VersionedProtocol {
	public static final long versionID = 1L;
	public Text test(Text t);
}

1.2 客户端

import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.ipc.RPC;
public class MyClient {

	public MyProtocol myProtocol;

	public MyClient() throws IOException {
		InetSocketAddress addr = new InetSocketAddress("localhost", 8888);
		myProtocol = (MyProtocol) RPC.waitForProxy(MyProtocol.class, 1, addr,
				new Configuration());
	}

	public void sendClientMsg() {
		System.out.println("I am client,waiting server's data...");
		Text result = myProtocol.test(new Text("message from client"));
		System.out.println(result.toString());
	}

	public static void main(String[] args) throws IOException {
		MyClient client = new MyClient();
		client.sendClientMsg();
	}
}
1.3 服务端

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.ipc.ProtocolSignature;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Server;
public class MyServer implements MyProtocol {

	public void initialize() throws InterruptedException, IOException {
		// numHandlers表示服务器端处理请求的线程数目
		Server server = new RPC.Builder(new Configuration())
				.setProtocol(MyProtocol.class).setInstance(this)
				.setBindAddress("localhost").setPort(8888).setNumHandlers(5)
				.build();
		server.start();
	}

	// 获取自定义的协议版本号
	@Override
	public long getProtocolVersion(String protocol,long clientVersion) throws IOException {
		return MyProtocol.versionID;
	}

	// 获取协议签名
	@Override
	public ProtocolSignature getProtocolSignature(String protocol,
			long clientVersion, int clientMethodsHash) throws IOException {
		return new ProtocolSignature(MyProtocol.versionID, null);
	}

	@Override
	public Text test(Text t) {
		if ("message from client".equals(t.toString()))
			return new Text("data from server");
		return new Text("who are you");
	}

	public static void main(String[] args) throws InterruptedException,
			IOException {
		MyServer server = new MyServer();
		server.initialize();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值