远程过程: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. hdu 3778

    简单的dfs  但繁琐的可以了 0.0 #include<cstdio> #include<cstring> #include<algorithm> using s ...

  2. Unity3d + NGUI 的多分辨率适配(黑边)

    原地址:http://www.2cto.com/kf/201310/250921.html 一.当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率分析报告”) 1.1 iOS设备的分辨率主 ...

  3. HTML字符实体(Character Entities),转义字符串(Escape Sequence)

    为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希 ...

  4. Executing a script from Nagios event handler fails to run

    I have Nagios running on a webserver. For this one Nagios service check in particular, if it fails, ...

  5. Android:常见错误提示

    记录开发中常出现的错误 1.遇到这样的错误时,应该立马想到是书写错误或语法错误,常见为android:name写成了name Attribute is missing the Android name ...

  6. 211. Add and Search Word - Data structure design

    题目: Design a data structure that supports the following two operations: void addWord(word) bool sear ...

  7. 99. Recover Binary Search Tree

    题目: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without chan ...

  8. mysql concat和group_concat

    mysql concat(str1,str2...)连接两个字符串,(数字也是可以的,会转成字符串) MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL mys ...

  9. java ServerSocket服务端编程

    public class Test { public static void main(String[] args) throws Exception{ //1. 构造ServerSocket实例,指 ...

  10. Unicode汉字编码表

    U+  0   1  2  3  4   5  6   7   8   9   A  B  C  D  E  F  ------------------------------------------ ...