Hadoop RPC使用方法示例

简介:

定义RPC协议

import java.io.IOException;

import org.apache.hadoop.ipc.VersionedProtocol;

/**
 * DateTime: 2014年12月28日 上午9:32:12
 *
 */
public interface ClientProtocol extends VersionedProtocol {
	//版本号,默认情况下,不同版本号的RPC客户端与Server之间不能相互通信
	public static final long versionID = 1L;
	public String hello(String msg) throws IOException;
}

实现RPC协议

import java.io.IOException;

import org.apache.hadoop.ipc.ProtocolSignature;

/**
 * DateTime: 2014年12月28日 上午9:41:38
 *
 */
public class ClientProtocolImpl implements ClientProtocol {

	@Override
	public long getProtocolVersion(String protocol, long clientVersion)
			throws IOException {
		return versionID;
	}

	@Override
	public ProtocolSignature getProtocolSignature(String protocol,
			long clientVersion, int clientMethodsHash) throws IOException {
		return new ProtocolSignature(versionID, null);
	}

	@Override
	public String hello(String msg) throws IOException {
		return "hello " + msg;
	}
	
	
}

构建并启动RPC Server

import java.io.IOException;

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

/**
 * DateTime: 2014年12月28日 上午9:47:05
 *
 */
public class RPCServer {
	private static final String HOST = "localhost";
	private static final int PORT = 2181;
	public static void main(String[] args) throws IOException {
		Configuration conf = new Configuration();

		Server server = new RPC.Builder(conf).setProtocol(ClientProtocol.class)
				.setInstance(new ClientProtocolImpl()).setBindAddress(HOST)
				.setNumHandlers(2)
				.setPort(PORT).build();
		server.start();
	}
}

构造并启动RPC Clinet并发送RPC请求

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

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

/**
 * DateTime20141228日 上午9:52:19
 *
 */
public class RPCClient {
	private static final String HOST = "localhost";
	private static final int PORT = 2181;

	public static void main(String[] args) throws IOException {
		Configuration conf = new Configuration();
		ClientProtocol proxy = RPC.getProxy(ClientProtocol.class, ClientProtocol.versionID,
				new InetSocketAddress(HOSTPORT), conf);
		String result = proxy.hello("world");
		System.out.println(result);
	}
}

目录
相关文章
|
分布式计算 Dubbo Hadoop
使用Hadoop提供的工具实现基于Proto协议的RPC通信
使用Hadoop提供的工具实现基于Proto协议的RPC通信
180 0
|
分布式计算 资源调度 安全
|
缓存 Java
【RPC基础系列3】gRPC简单示例
我们不能只看原理,而忽略实践,也不能只关注实践,而忽略原理,应该两者兼顾! 前面两篇文章《【RPC基础系列1】聊聊RPC》、《【RPC基础系列2】一文搞懂gRPC和Thrift的基本原理和区别》就能基本搞懂三个重要概念:RPC、gRPC和Thrift,这篇文章我们就看gPRC的使用姿势。
201 0
【RPC基础系列3】gRPC简单示例
|
分布式计算 资源调度 安全
Hadoop Yarn RPC未授权访问漏洞
Hadoop Yarn RPC未授权访问漏洞
1541 0
Hadoop Yarn RPC未授权访问漏洞
|
云安全 分布式计算 资源调度
Hadoop Yarn RPC 0 Day在野利用分析与传播手段披露
近日,阿里云安全监测到Kinsing僵尸网络变种,除了沿用之前攻击手法,最新利用了Hadoop Yarn RPC未授权访问漏洞进行传播。 Hadoop作为一个分布式计算应用框架,种类功能繁多,而Hadoop Yarn作为其核心组件之一,负责将资源分配至各个集群中运行各种应用程序,并调度不同集群节点上的任务执行。Hadoop Yarn RPC未授权访问使得攻击者无需认证即可通过RPC通信执行恶意命令。Hadoop作为大数据计算基础组件往往集群化部署,一旦一台主机沦陷其整个集群都将受到威胁,其对外暴露端口服务会造成极大威胁。阿里云安全持续对该BOT进行监控,发现近期传播有所上升,提醒广大用户
173 0
Hadoop Yarn RPC 0 Day在野利用分析与传播手段披露
|
云安全 分布式计算 资源调度
|
JSON Dubbo 网络协议
分布式RPC框架Dubbo实现服务治理实用示例:集成Kryo实现高速序列化,集成Hystrix实现熔断器
本文在熟悉远程RPC服务调用的基础上,详细说明了Dubbo框架实现服务治理的实用的示例,Dubbo和Kryo集成可以实现高速序列化,Dubbo和Hystrix集成可以实现服务熔断,可以在生产端和消费端使用熔断器实现服务熔断的功能,集成Hystrix的框架可以通过Hystrix仪表盘实现对远程RPC调用的服务的治理。最后重点讲述了Hystrix的相关的实用分析。通过这篇文章,可以熟悉并会使用服务的熔断机制。
299 0
分布式RPC框架Dubbo实现服务治理实用示例:集成Kryo实现高速序列化,集成Hystrix实现熔断器
|
存储 分布式计算 大数据
湖北Hadoop,基于大数据的医疗行业发展,解析大数据技术在医疗领域的应用及使用方法
健康医疗大数据作为国家重要的基础性战略资源,也受到了政企、医院等行业相关人员的高度重视。如何让医疗行业及领域去便捷管理和使用海量的大数据?
1381 0
|
Dubbo Java 应用服务中间件
RPC原理以及示例
讲述RPC原理,以及一个简单的示例
2135 0