第一部分: 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. postgresql+slony-i安装配置主从

    slon软件下载地址:slony1-1.2.6 http://slony.info/downloads/1.2/source/ postgresql下载地址: http://www.postgresq ...

  2. Android框架之AndroidAnnotations基础

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

  3. Java String,StringBuffer和StringBuilder的区别

    [可变与不可变] String是字符串常量,不可变. StringBuffer和StringBuilder是字符串变量,可变. [执行速度方面] StringBuilder > StringBu ...

  4. VS2010--canot determine the locationof the vs common tools folder

    在vcvars32.bat第一行后复制 @SET VSINSTALLDIR=c:\Program Files\Microsoft Visual Studio 10.0 @SET VCINSTALLDI ...

  5. JSON字符串解析

    有时保存在数据库的数据是一串json字符串,需要进行读取的时候就需要解析操作. 简单介绍两种: 1.net.sf.json.* 2.com.alibaba.fastjson.* 需要的包自行下载. 第 ...

  6. python第一天基础1-1

    win下是没有多进程的 windows:1.下载安装包 https://www.python.org/downloads/2.安装 默认安装路径:C:\python273.配置环境变量 [右键计算机] ...

  7. JSTL和EL表达式多重if问题

    俾人以前在写一个查询功能时,由于结果状态分好几种,于是页面就用<c:if></c:if>写了一大堆来判断,后来上网查了下资料,发现有个语法类似于多重if,挺方便的,语法是 &l ...

  8. 《UML大战需求分析》阅读笔记4

    流程分析利器之二,状态机图. 状态机图也可以叫状态图,也是用来分析流程的,之前的活动图的主体是事件的行为,而状态机图主要描述的是事件的状态. 开始:实心圆点: 结束:点加环:(与活动图一样) 状态:圆 ...

  9. javaweb中实现在线人数统计

    session并不是浏览器关闭时销毁的,而是在session失效的时候销毁下列代码就是监测session创建.销毁 package com.my.count; import javax.servlet ...

  10. windows sdk编程 richedit创建,像十六进制编辑器一样显示文件

    编译环境 :windows 7 64位 vs2010,工程创建选择"win32项目" 注意添加几个头文件 #include <WinBase.h> #include & ...