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

本文介绍了一个基于Hadoop的RPC远程过程调用实现案例,包括项目目录结构、Maven依赖配置、服务端与客户端代码示例及运行流程。


被折叠的 条评论
为什么被折叠?



