为什么会引入RPC:

RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。当我们讨论HDFS的,通信可能发生在:

  • Client-NameNode之间,其中NameNode是服务器
  • Client-DataNode之间,其中DataNode是服务器
  • DataNode-NameNode之间,其中NameNode是服务器
  • DataNode-DateNode之间,其中某一个DateNode是服务器,另一个是客户端

如果我们考虑Hadoop的Map/Reduce以后,这些系统间的通信就更复杂了。为了解决这些客户机/服务器之间的通信,Hadoop引入了一个RPC框架

Hadoop的RPC的特点:

  RPC是分布式计算中C/S模型的一个应用实例,对于Hadoop而言,他有以下几个特点:

  • 透明性
  • 高性能
  • 可控性:

Hadoop的RPC的总体架构:

  hadoop RPC主要分为四个部分:序列化层,函数调用层,网络传输层,服务端处理框架。

  • 序列化层

    • 序列化的主要作用是将结构化对象转换为字节流以便通过网络进行传输或者写入持久存储。在RPC框架中,它主要用于将用户请求中的参数或者应答转换成字节流以便跨机传输。
  • 函数调用层
    • 函数调用层主要功能是:定位要调用的函数,并执行该函数,Hadoop采用了java的反射机制和动态代理实现了函数的调用。
  • 网络传输层
    • 网络传输层描述了Client和Server之间消息的传输方式,Hadoop采用了基于TCP/IP的socket机制。
  • 服务端处理框架
    • 服务端处理框架可被抽象为网络I/O处理模型,她描述了客户端和服务器端信息交互的方式,她的设计直接决定了服务器端的并发处理能力。常见的网络I/O模型有阻塞式I/O,非阻塞式I/O、事件驱动式I/O等,而Hadoop采用了基于reactor设计模式的事件驱动I/O模型

HadoopRPC的使用方法:

  HadoopRPC主要提供了两种接口

  • public static <T> T getProxy/waitForProxy(Class<T> protocol,long clientVersion,InetSocketAddress addr, Configuration conf,SocketFactory factory) throws IOException;

用于构造客户端代理对象(该对象实现了某个协议),用于向服务器端发送RPC请求。

  • public static <T> Server RPC.Builder(Configuration).build();

为某个协议(java接口)实例构造服务器对象,用于客户端处理发送的请求。

通常,使用Hadoop 的RPC 可分为一下4个步骤:

  1. 定义RPC协议
  2. 实现RPC协议
  3. 构造并启动RPC Server
  4. 构造RPC Client 并发发送RPC请求

经过以上四部,我们便利用了Hadoop搭建了一个非常高效的c/s网络模型。

Hadoop RPC类详解:

Hadoop RPC主要由三大类组成,即RPC、Client、和Server ,分别对应对外编程接口、客户端实现和服务器端实现。

  1. ipc.RPC类分析。

主要类图:

  1. ipc.Client类分析。

发送远程过程调用信息并接收执行结果。

  1. ipc.Server类分析。

Hadoop的RPC框架介绍的更多相关文章

  1. 远程服务调用RPC框架介绍,微服务架构介绍和RPC框架对比,dubbo、SpringClound对比

    远程服务调用RPC框架介绍,微服务架构介绍和RPC框架对比,dubbo.SpringClound对比 远程服务调用RPC框架介绍,RPC简单的来说就是像调用本地服务一样调用远程服务. 分布式RPC需要 ...

  2. [转]新兵训练营系列课程——平台RPC框架介绍

    原文:http://weibo.com/p/1001643875439147097368 课程大纲 1.RPC简介 1.1 什么是RPC 1.2 RPC与其他远程调用方式比较 2.Motan RPC框 ...

  3. 大数据学习——hadoop的RPC框架

    项目结构 服务端代码 test-hadoop-rpc pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  4. RPC 框架 介绍 (转)

    出处: 谁能用通俗的语言解释一下什么是 RPC 框架? 知乎: 问题:了解到最近 Java 的 Netty 很火,只知道它是这样类型的一种框架.想了解一下它主要用于解决了什么问题?适用于什么样的场景? ...

  5. Thrift RPC框架介绍

    u 简介 Thrift是一种开源的跨语言的RPC服务框架.Thrift最初由facebook公司开发的,在2007年facebook将其提交apache基金会开源了.对于当时的facebook来说创造 ...

  6. JAVA中几种常用的RPC框架介绍

    原文:https://blog.csdn.net/zhaowen25/article/details/45443951

  7. 分布式服务框架介绍:最成熟的开源NIO框架Netty

    尽管JDK提供了丰富的NIO类库,网上也有很多NIO学习例程,但是直接使用Java NIO类库想要开发出稳定可靠的通信框架却并非易事,原因如下: 1)NIO的类库和API繁杂,使用麻烦,你需要熟练掌握 ...

  8. Hadoop_12_Hadoop 中的RPC框架演示

    Hadoop中自己提供了一个RPC的框架.集群中各节点的通讯都使用了那个框架 1.服务端 1.1.业务接口:ClientNamenodeProtocol package cn.bigdata.hdfs ...

  9. day07 hadoop里面的RPC框架使用

    PS: RPC远程调用 Webservice啥的都是远程调用.下面简单介绍其使用过程 Hadoop已经实现了RPC框架,不用我们自己写,不过需要我们注意几点:1.发布服务端和客户端必须包名相同 1.服 ...

随机推荐

  1. LinkedList存储一副扑克牌,实现洗牌功能。

    package cd.itcast.runble; import java.util.LinkedList; import java.util.Random; /** * LinkedList存储一副 ...

  2. 【转】在delphi中实现控件的拖拽

    提示:可以添加一个布尔来控制可否拖动的状态,这里提供所有都能拖动的方法. procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseB ...

  3. javascript雪花效果 注释版

    (function () { // 添加事件监听器 function addEvent(a, b, c) { if (a.addEventListener) a.addEventListener(b, ...

  4. STM32F0xx_ADC采集电压配置详细过程

    前言 关于ADC这一块的功能基本上也算是CortexM芯片的标配了.ST的每一块芯片都有这个功能,只是说因型号不同,通道数.位数等有所不同.STM8的芯片大多数都是10的,也就是说分辨率可达到:参考电 ...

  5. [terry笔记]dblink

    dblink在分布式数据库集群中很常见,今天简单的总结一下. db link 的命名和global_names有关,global_name是数据库全局名称,global_name在你所管理的数据库中要 ...

  6. selenium+python登录登出百度,等待页面加载,鼠标定位

    #coding:gbk from selenium import webdriver from selenium.webdriver.common.keys import Keys from sele ...

  7. python Django 学习笔记(六)—— 写一个简单blog做增删改练手

    简单效果图 1,创建一个项目myblog 可参考这里 myblog/ manage.py myblog/ __init__.py settings.py urls.py wsgi.py 2,创建blo ...

  8. About Inside the Azure Storage Outage of November 18th

    Channel 9的官方解释 http://channel9.msdn.com/posts/Inside-the-Azure-Storage-Outage-of-November-18th 曾经在自己 ...

  9. Java当中的异常

    异常:中断了正常指令流的事件,是JVM虚拟机产生的对象 异常是程序运行时产生的,和编译无关 class Test{ public static void main(String args[]){ Sy ...

  10. java的变量

    什么是变量? 在计算机中用来存储信息,通过声明语句来指明存储位置和所需空间. 变量的声明方法及赋值 分号:语句结束标志             赋值号:将=右边的值赋给左边的变量 变量有哪些数据类型? ...