Hadoop 2.x RPC框架通讯

1.Project Directory

Server端

Client端

服务端和客户端所在包(就是项目内路径:比如org.fool.hadoop.rpc)必须一致,否则会出现如下错误

 2. Maven Dependency

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>org.fool.hadoop</groupId>
	<artifactId>hadoop</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>hadoop</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<hadoop.version>2.6.4</hadoop.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>${hadoop.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-hdfs</artifactId>
			<version>${hadoop.version}</version>
		</dependency>
		<dependency>
			<groupId>jdk.tools</groupId>
			<artifactId>jdk.tools</artifactId>
			<version>1.8</version>
			<scope>system</scope>
			<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
		</dependency>
	</dependencies>
</project>

3.Server端代码

LoginService.java

package org.fool.hadoop.rpc;

public interface LoginService {
	public static final long versionID = 1L;

	public String login(String username, String password);
}

 LoginServiceImpl.java

package org.fool.hadoop.rpc;

public class LoginServiceImpl implements LoginService {

	@Override
	public String login(String username, String password) {
		return username + " logged in successfully!";
	}

}

 Starter.java

package org.fool.hadoop.rpc;

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.Builder;
import org.apache.hadoop.ipc.RPC.Server;

public class Starter {
	public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
		Builder builder = new RPC.Builder(new Configuration());

		builder.setBindAddress("hadoop-000").setPort(10000).setProtocol(LoginService.class)
				.setInstance(new LoginServiceImpl());

		Server build = builder.build();

		build.start();
	}
}

4.Client端代码

LoginService.java

package org.fool.hadoop.rpc;

public interface LoginService {
	public static final long versionID = 1L;
	
	public String login(String username, String password);
}

 LoginController.java

package org.fool.hadoop.rpc;

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

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

public class LoginController {
	public static void main(String[] args) throws IOException {
		LoginService proxy = RPC.getProxy(LoginService.class, 1L, new InetSocketAddress("hadoop-000", 10000), new Configuration());
	
		String result = proxy.login("hadoop", "RPC");
		
		System.out.println(result);
	}
}

5.启动Starter后,运行LoginController


 
 


 

猜你喜欢

转载自agilestyle.iteye.com/blog/2285624