远程过程:java进程.即一个java进程调用另外一个java进程中对象的方法.

调用方称作客户端(client),被调用方称作服务端(server).rpc的通信在java中表现为客户端去调用服务端对象中的方法.RPC通信就是cs结构的通信.client端会知道服务端被调用对象的接口.
RPC是hadoop分布式机制运行的基础.

代码示例:

接口:MyBizable

public interface MyBizable extends VersionedProtocol{
public static final int PORT = 123456 ;
public abstract String hello(String name);
public abstract long getProtocolVersion(String protocol,long clientVersion)throws IOException;
}

接口对应的实现类:MyBiz

public class MyBiz implements MyBizable {
@Override
public long getProtocolVersion(String protocol, long clientVersion)
throws IOException {
return MyBizable.PORT;
}
@Override
public String hello(String name) {
System.out.println("我被调用了.");
return "hello "+ name;
}
}

服务类:MyServer

public class MyServer {
public static final String ADDRESS = "localhost";
public static final int PORT = 2454;
public static void main(String[] args) throws Exception{
/**
* 构造一个RPC的服务端
* @param instance 实例对象的方法会被客户端调用。
* @param bindAddress 监听绑定的地址
* @param port 监听连接的端口
* @param conf 配置
*/
Server server = RPC.getServer(new MyBiz(), MyServer.ADDRESS, MyServer.PORT, new Configuration());
server.start();
}
}

客户端:MyClient

public class MyClient {
public static void main(String[] args) throws Exception{
MyBizable client =
              (MyBizable) RPC.getProxy(MyBizable.class, MyBizable.PORT, new InetSocketAddress(MyServer.ADDRESS,MyServer.PORT), new Configuration());
String result = client.hello("world");
System.out.println(result);
}
}

客户端与NameNode通信的过程:

  NameNode本身就是一个RPC的服务端,主要实现的接口有:ClientProtocol,DatanodeProtocol,NamenodeProtocol

  ClientProtocol:是我们客户端(FileSystem)与NameNode通信的接口.

  DatanodeProtocol:是DataNode和NameNode通信的接口.

  

  DFSClient:直接调用NameNode接口的对象.

        用户代码是通过DistributedFileSystem调用DFSClient对象,才能与NameNode打交道.

  我们的RPC客户端实际上是DFSClient,服务端是NameNode.

  NameNode为什么要用rpc机制?

    RPC是远程过程调用,会起多个java进程,并且之间进行通信的时候用的是Scoket通信,也就意味着RPC通信客户端和服务端不见得是在位于同一台机器上,因为socker通信可以指定ip和端口,意味着我们整个完整的hadoop体系结构是可以分散在多个进程,多个不同的服务器之上的,所以我们的NameNode作为其中的一部分,必然也是需要实现RPC机制的.可以让我们一个完整的软件程序运行在不同的服务器上,实现分布式.

rpc,客户端与NameNode通信的过程的更多相关文章

  1. 客户端MapReduce提交到YARN过程

    在Mapreduce v1中是使用JobClient来和JobTracker交互完成Job的提交,用户先创建一个Job,通过JobConf设置好参数,通过JobClient提交并监控Job的进展,在J ...

  2. [C语言]一个很实用的服务端和客户端进行TCP通信的实例

    本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...

  3. 搭建Minisipserve服务器实现局域网内IOS客户端idoubs的通信

    idoubs是IOS设备开发的第一款全功能并开放源码的3GPP IMS客户端,它同时专为IOS平台开发设计的voIP测试版客户端,以doubango为框架,能实现当前最先进的多媒体功能,主要功能有:语 ...

  4. java学习笔记——Java多客户端与服务器通信

    先说一下大概的思路: 应用多线程来实现服务器与多客户端之间的通信 1.服务器端创建ServerSocket,循环调用accept()等待客户端连接: 2.客户端创建一个Socket并请求与服务器端连接 ...

  5. C#Socket_TCP(客户端,服务器端通信)

    客户端与服务器通信,通过IP(识别主机)+端口号(识别应用程序). IP地址查询方式:Windows+R键,输入cmd,输入ipconfig. 端口号:可自行设定,但通常为4位. 服务器端: usin ...

  6. Oracle11g R2客户端安装图文详解过程

    转: Oracle11g R2客户端安装图文详解过程 2018-06-17 13:30:26 大话JAVA的那些事 阅读数 4129更多 分类专栏: Oracle   版权声明:本文为博主原创文章,遵 ...

  7. 客户端请求服务器端通信, Web 编程发展基础|乐字节

    乐字节的小伙伴们,好久不见,甚是想念啊! 前面我发布的文章算是把Java初级基础阶段讲完了,接下来小乐将会给大家接着讲Java中级阶段——Javaweb. 首先,我们要看看Javaweb阶段主要重点掌 ...

  8. 原生 Java 客户端进行消息通信

    原生 Java 客户端进行消息通信 Direct 交换器 DirectProducer:direct类型交换器的生产者 NormalConsumer:普通的消费者 MulitBindConsumer: ...

  9. Datanode 怎么与 Namenode 通信?

    在分析DataNode时, 因为DataNode上保存的是数据块, 因此DataNode主要是对数据块进行操作. A. DataNode的主要工作流程 客户端和DataNode的通信: 客户端向Dat ...

随机推荐

  1. <Learning How to Learn>Week One: Focused versus Diffuse Thinking

    1-1 Introduction to the focused and diffuse modes (4:40) 两种思考的模式:focused mode以及diffuse mode focused ...

  2. IDFA问题,苹果上传问题。improper Advertising identifier [IDFA] Usage.

    原地址: 报告 improper Advertising identifier [IDFA] Usage. Your app contains the Advertising Identifier [ ...

  3. POJ1265Area

    http://poj.org/problem?id=1265 题意 : 给你一个点阵,上边有很多点连成的多边形,让你求多边形内部的点和边界上的点以及多边形的面积,要注意他每次给出的点并不是点的横纵坐标 ...

  4. Tornado,展示一下模板渲染

    按网上一步一步走一下. 感觉模板和DJANGO的差不多,但更灵活,不限制PYTHON的使用. 前端和后端,这模板使用的规则在哪里呢? import os.path import tornado.htt ...

  5. hdu 1729 Stone Game 博弈论

    那么对于这题对于每一堆,放石子放满就想当于满的时候取s-c个,反向只是让我理解题意更深. 首先我们知道(S,S)这个局面是必败局面.对于每一堆能加的数量有限,而当c的值(大于或者等于) D=sqrt( ...

  6. Java知识大全

    http://blog.csdn.net/zhangerqing/article/details/8245560

  7. POJ2993——Help Me with the Game(字符串处理+排序)

    Help Me with the Game DescriptionYour task is to read a picture of a chessboard position and print i ...

  8. java编写二叉树以及前序遍历、中序遍历和后序遍历 .

    /** * 实现二叉树的创建.前序遍历.中序遍历和后序遍历 **/ package DataStructure; /** * Copyright 2014 by Ruiqin Sun * All ri ...

  9. HDU1054Strategic Game(最小顶点覆盖数)

    我们来先了解一下什么是最小顶点覆盖: 图G的顶点覆盖是一个顶点集合V,使得G中的每一条边都接触V中的至少一个顶点.我们称集合V覆盖了G的边.最小顶点覆盖是用最少的顶点来覆盖所有的边.顶点覆盖数是最小顶 ...

  10. JavaScript DOM高级程序设计2.3 this--我要坚持到底!

    先从一个例子说起 var sound = 'Roar'; function myOrneryBeast() { this.style.color='green';//window 方法被调用时所属的对 ...