第一部分: hadoop rpc基础

RPC,远程程序调用,分布式计算中C/S模型的一个应用实例。

同其他RPC框架一样,Hadoop分为四个部分:

  • 序列化层:支持多种框架实现序列化与反序列化
  • 函数调用层:利用java反射与动态代理实现
  • 网络传输层:基于TCP/IP的Socket机制
  • 服务的处理框架:基于Reactor模式的事件驱动IO模型

Hadoop RPC主要对外提供2种接口

public static ProtocolProxy getProxy/waitForProxy:

构造一个客户端代理对象,向服务器发送RPC请求

public static Server RPC.Builder(Configuration).build(…):

为某个协议实例构造一个服务器对象,用于处理客户端发送请求。

如何使用Hadoop RPC?

其实很简单,按照下面四步即可完成高性能CS网络模型

1.定义RPC协议

2.实现RPC协议

3.构造和启动RPC SERVER

4.构造RPC Client并发送请求

下面是代码实例, 依赖hadoop-common-版本.jar

1.定义RPC协议

hadoop中所有自定义RPC接口都必须继承VersionedProtocol接口

package myrpc;

import org.apache.hadoop.ipc.VersionedProtocol;

/**

* Created by ywszjut on 14-8-22.

*/

public interface ClientProtocol extends VersionedProtocol {

public static final long versionID=1L;

String echo(String value);

}

2.实现协议

package myrpc;

import org.apache.hadoop.ipc.ProtocolSignature;

import java.io.IOException;

/**

* Created by ywszjut on 14-8-22.

*/

public class ClientProtocolImpl implements ClientProtocol {

@Override

public String echo(String value) {

return "hello "+value;

}

@Override

public long getProtocolVersion(String s, long l) throws IOException {

return ClientProtocol.versionID;

}

@Override

public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException {

return new ProtocolSignature(ClientProtocol.versionID,null);

}

}

3.构造和启动RPC SERVER

package myrpc;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

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

import java.io.IOException;

/**

* Created by ywszjut on 14-8-22.

*/

public class MyRpcServer {

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

Server server = new RPC.Builder(new Configuration()).setProtocol(ClientProtocol.class)

.setInstance(new ClientProtocolImpl()).setBindAddress("127.0.0.1").setPort(8787)

.setNumHandlers(5).build();

server.start();

}

}

4.构造客户端并发送请求

package myrpc;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

import java.io.IOException;

import java.net.InetSocketAddress;

/**

* Hello world!

*/

public class Client {

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

ClientProtocol proxy = (ClientProtocol) RPC.getProxy(ClientProtocol.class,ClientProtocol.versionID,new InetSocketAddress("127.0.0.1",8787),new Configuration());

String result = proxy.echo("123");

System.out.println(result);

}

}

测试的时候,先启动3,再启动4,你会发现控制台打出了hello 123

好,既然hello world 搞完, 开始学习RPC类的具体实现

hadoop rpc基础的更多相关文章

  1. Hadoop学习笔记—3.Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  2. Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  3. Apache Hadoop RPC Authentication 安全绕过漏洞

    漏洞名称: Apache Hadoop RPC Authentication 安全绕过漏洞 CNNVD编号: CNNVD-201308-425 发布时间: 2013-08-28 更新时间: 2013- ...

  4. 每天收获一点点------Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  5. Hadoop RPC

    hadoop rpc机制 && 将avro引入hadoop rpc机制初探 1 RPC RPC(Remote Procedure Call)--远程过程调用,它是一种通过网络从远程计算 ...

  6. Hadoop RPC实例

    本文发表于本人博客. 上次写了个hadoop伪分布环境搭建的笔记了,今天来说下hadoop分布式构建的基础RPC,这个RPC在提交Job任务的时候底层就是创建了RPC来实现远程过程调用服务端. 我们首 ...

  7. Hadoop RPC机制详解

    网络通信模块是分布式系统中最底层的模块,他直接支撑了上层分布式环境下复杂的进程间通信逻辑,是所有分布式系统的基础.远程过程调用(RPC)是一种常用的分布式网络通信协议,他允许运行于一台计算机的程序调用 ...

  8. Hadoop系列番外篇之一文搞懂Hadoop RPC框架及细节实现

    @ 目录 Hadoop RPC 框架解析 1.Hadoop RPC框架概述 1.1 RPC框架特点 1.2 Hadoop RPC框架 2.Java基础知识回顾 2.1 Java反射机制与动态代理 2. ...

  9. 【Hadoop代码笔记】通过JobClient对Jobtracker的调用详细了解Hadoop RPC

    Hadoop的各个服务间,客户端和服务间的交互采用RPC方式.关于这种机制介绍的资源很多,也不难理解,这里不做背景介绍.只是尝试从Jobclient向JobTracker提交作业这个最简单的客户端服务 ...

随机推荐

  1. Android框架之AndroidAnnotations基础

    一:开源网址 https://github.com/excilys/androidannotations/wiki 二:AndroidAnnotation特点 (1)依赖注入 可以注入 views, ...

  2. .NET entityframework for mysql ,datetime字段存储值时有误差

    昨天Tester发现数据有问题,大部分时间“datetime类型”都多了一秒,很少一部分数据的时间能完全对上(年月日时分秒),因为缺少关键日志,就各种排查,最后发现在调用Savechange方法前一刻 ...

  3. cv_prj2

    Computer Vision Project 2 – Harris Corner Detector 姓名: 王兴路 学号: 3140102282 指导老师: 宋明黎 2016-12-16 19:30 ...

  4. OD使用教程

    OD使用教程: 跳转指令.满足才能跳转成功  

  5. 本地socket使用AF_UNIX

    int socket(int domain, int type, int protocol); domain参数代表地址族,我们最常用的是TCP/IP协议通信中使用的是AF_INET,在有些情况下建立 ...

  6. 一些比较常用的Linux命令

    我有一些是我是参考别人的,忘记是谁了,在这里要感谢一下ta. #命令格式就是就是由命令+空格+一些命令用法的选项(可以选择多个用法)+空格+/+目录名或者文件名,有些是直接打命令就可以了,比如ls - ...

  7. Unsupported major.minor version 51.0解决方法

    jdk1.6工程中使用外部jar包中类出现:Unsupported major.minor version 51.0 问题原因:外部jar包使用jdk1.7(jdk7)编译,而使用此jar包的工程jd ...

  8. ExecutorService中submit和execute的区别(转)

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...

  9. Python 学习---------Day1

    第一章 问答环节一.人们为何使用Python 软件质量 开发者的效率 程序的可移植性 标准库的支持 组件集成 享受乐趣二.Python的缺点 Python唯一的缺点就是:与C/C++这类编译语言相比, ...

  10. React Native填坑之旅--Navigation篇

    React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...