上篇文章Yarn诞生背景、架构和工作机制介绍 介绍了Yarn是Hadoop 2.0中的资源管理系统,它的核心设计逻辑是修改MR v1的运行时环境,将MR v1中的JobTracker划分成两个独立的服务:ResourceManager和ApplicationMaster,其中RM负责整个系统的资源管理和分配,AM负责应用程序的管理。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的 ApplicationMaster,它负责想Resource Manager申请资源,并要求NodeManager启动可以占用一定资源的任务。由于不同的 ApplicationMaster 被分布到不同的节点上,因此他们之间不会相互影响。
YARN基础库
1. 序列化 Protocal Buffers
Protocal buffers 是一种高效的结构化数据存储格式,可以用于进行数据序列化和反序列化
源码路径:hadoop-3.2.3-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
在YARN中,所有RPC函数的参数均采用Protocol Buffers定义的,相比于MRv1中基 于Writable序列化的方法,Protocol Buffers的引入使得YARN在向后兼容性和性能方面向前迈进了一大步。
YARN中使用Protocol Buffer定义的RPC包含:
-
applicationmaster_protocol.proto : AM 与 RM 之间的协议 Application- MasterProtocol。
-
applicationclient_protocol.proto: JobClient(作业提交客户端)与 RM 之间的协议 ApplicationClientProtocol。
-
containermanagement_protocol.proto: AM 与 NM 之间的协议Container- ManagementProtocol。
-
resourcemanager_administration_protocol.proto: Admin(管理员)与 RM 之 间的通信协议 ResourceManagerAdministrationProtocol。
-
yarn_protos.proto: 定义了各协议RPC的参数。
-
ResourceTracker.proto: 定义了 NM 与 RM 之间的协议 ResourceTracker。
除了以上几个内核中的协议,YARN 还使用 Protocol Buffers 对 MapReduce 中的协议进 行了重新定义:
MRClientProtocol.proto : JobClient(作业提交客户端)与 MRAppMaster 之 间的协议— MRClientProtocol。
mr_protos.proto:定义了 MRClientProtocol 协议的各个参数。
2. Apache Avro
它是Hadoop下的子项目,本身既是一个序列化框架,同时也实现了RPC的功能。编写一个Avro应用需要三步
a. 定义消息格式文件,通常以avro为拓展名
b. 使用Avro编译器生成特定语言的代码文件
c. 使用Avro库提供的API来编写应用程序
3. RPC库
RPC 总体架构
同其他RPC框架一样,Hadoop RPC主要分为四个部分,分别是序列化层、函数调用层、网络传输和服务器端处理框架,具体实现机制如下:
序列化层:序列化主要作用是将结构化对象转为字节流以便于通过网络进行传输或写入持久存储,在RPC框架中,它主要用于将用户请求中的参数或者应答转化为字节流以便跨机器传输。
函数调用层:函数调用层的主要功能是定位要调用的函数并执行函数,Hadoop RPC采用了Java反射机制与动态代理实现了函数调用。
网络传输层:网络传输层描述了Client和Server之间消息传输的方式,Hadoop RPC采用了机遇TCP/IP的Socket机制
服务器端处理框架:服务器端处理框架可被抽象为网络I/O模型,它描述了客户端与服务端间信息交互方式,它的设计直接决定着服务器端的并发处理能力,常见的网络I/O模式有阻塞式I/O、非阻塞式I/O、事件驱动I/O等,而Hadoop RPC采用了机遇Reactor设计模式的事件驱动I/O模型