写在前面
本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系
解答
Hadoop RPC
一个复杂的分布式系统,底层都会有通信机制来维持上层应用进程间的通信(Inter-Process Communication,IPC)逻辑,这也是所有分布式系统的基础。
在分布式网络通信中通常会采用远程过程调用(Remote Procedure Call,RPC)来作为通信协议。
Hadoop作为一个复杂的分布式系统,实现了符合自己的RPC通信协议,并支撑多个上层应用的多个分布式子系统,如分布式存储系统(HDFS)、分布式离线计算系统(Mapreduce)和分布式资源管理与调度系统(YARN)等。
Hadoop RPC采用的是自主独立开发的协议,其核心内容包含服务端(Server)、客户端(Client)及交互协议(Interactive Protocol)。
Hadoop RPC在 hadoop-common-project 子项目中实现,其对应的包名为org.apache.hadoop.ipc。
Hadoop RPC通信过程
请结合我的这篇博客一起来理解上面的流程图——全网最详细完备的HDFS读写流程
Hadoop RPC特点
Hadoop RPC在分布式计算中可以理解为一个客户端( Client)/服务器( Server)模式。
它能做到分布式灵活部署、解耦服务及提高性能等。
透明性
当使用者在本地调用远程的应用程序时,使用者不会察觉到跨机器之间的通信。
这个调用过程是完全透明的,使用者不知道调用的应用程序中的函数在哪里。
从连接服务到发送请求,然后获取响应结果,整个过程就仿佛是在本地执行调用。
高性能
在 Hadoop各个分布式子系统中,如分布式存储系统(HDFS)、分布式离线计算系统apreduce)、分布式资源管理与调度系统(YARN),均采用主( Master)/从( Slave) 模式。
Master实际是服务程序( Server),负责处理集群中所有 Slave发送的请求。
在 Hadoop分布式系统中,对处理高并发应用场景的能力要求是很高的。
因而RPC Server需要一个高性能的服务程序来满足多个客户端( Client)的并发请求。
易用性
在Java基础类库中,内嵌了RPC框架。
Hadoop系统中没有直接采用Java内嵌的RPC 框架,主要原因在于RPC是 Hadoop底层核心模块之一,需要满足易用性、高性能和轻量级等特性。
Hadoop系统创始人 Doug Cutting在谈论设计 Hadoop系统时提到,Java内嵌的远程方法调用( Remote Method Invocation,RMI)偏重量级,使用者能够控制的内容较少(如网络、超时、缓冲等)