远程过程: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. js对象转到字符串

    var str = JSON.stringify(obj);

  2. Eclipse console文本换行

    Eclipse换行主要有3个方面 格式化时编辑器文本换行 源代码注释文本换行 Eclipse控制台console显示文本换行 1和2参考 http://hi.baidu.com/ae6623/item ...

  3. spoj 178

    输出相邻的点   比较简单吧....... #include <cstdio> #include <cstring> using namespace std; int main ...

  4. C++ 嵌套类使用(一)

    一.嵌套类 在一个类的内部定义另一个类,我们称之为嵌套类(nested class),或者嵌套类型.之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的 ...

  5. linux ps查看进程命令

    linux ps查看进程命令ps命令作用:将某个时间点的程序运作情况撷取下来 实例: [root@linux ~]# ps aux [root@linux ~]# ps -lA [root@linux ...

  6. 内核request_mem_region 和 ioremap的理解

    request_mem_region仅仅是linux对IO内存的管理,意思指这块内存我已经占用了,别人就不要动了,也不能被swap出去.使用这些寄存器时,可以不调用request_mem_region ...

  7. 在服务器端使用 Git 创建源代码仓库

    下面简单讲述在服务器搭建 Git 仓库的过程. 安装 Git 程序 Git 是分布式的,即程序不区分服务端和客户端,大部分 Linux 发行版的官方源里都有它,比如在 Archlinux 里安装 Gi ...

  8. P59、面试题7:用两个栈实现队列

    题目:用两个栈实现一个队列.队列声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列为插入结点和在队列头部删除结点的功能. stack1专门用于插入数据,stack2 ...

  9. 关于JavaScript中的setTimeout()链式调用和setInterval()探索

    http://www.cnblogs.com/Wenwang/archive/2012/01/06/2314283.html http://www.cnblogs.com/yangjunhua/arc ...

  10. itoa函数的实现(不同进制)

    2013-07-08 17:12:30 itoa函数相对于atoi函数,比较简单,还是要注意考虑的全面. 小结: 一下几点需要考虑: 对负数,要加上负号: 考虑不同进制,根据要求进行处理:对不同的进制 ...