Protocol Buffers
Google开源的序列化库
YARN将Protocol Buffers用到了RPC通信中,相比于MRv1的Writable,向后兼容性、扩展性等方面提高了很多
编写一个Protocol Buffers应用需要以下三步:
- 定义消息格式文件,通常以proto作为扩展名
- 使用Google提供的Protocol Buffers编译器生成特定语言的代码文件
- 使用Protocol Buffers库提供的API来编写应用程序
Apache Avro
Avro是Hadoop生态系统中的RPC框架,具有平台无关、支持动态模式(无需编译)等优点
目前,YARN采用Avro记录MapReduce应用程序日志(用于故障后台应用程序恢复)
Avro相比Protocol Buffers有一下特点:
- 支持动态模式,这有利于搭建通用的数据处理系统,同时避免了代码入侵
- 数据无须加标签
- 无须手工分配的域标识
编写一个Avro应用需三步,同上
RPC库
RPC总体架构
- 序列化层
- 函数调用层
- 网络传输层
- 服务器端处理框架
Hadoop RPC类详解(主要由三大类组成,即RPC、Client、Server),分别对应对外编程接口、客户端实现和服务端实现
- ipc.RPC类分析
- ipc.Client类分析
- ipc.Server类分析
Hadoop RPC参数调优
1 Reader线程数目
2 每个Handler线程对应的最大Call数目
3 Handler线程数目
4 客户端最大重试次数
YARN RPC实现(均由对象序列化和远程过程调用组成)
- 跨语言调用
- 引入IDL
- 协议兼容性
服务库和事件库
YARN将所有对象服务化,以便统一管理(创建、销毁等),而服务之间则采用事件机制进行通信,不再基于函数调用的方式
服务库
对于生命周期较长的对象,YARN采用了基于服务的对象管理模型对其进行管理,该模型主要有以下几个特点
- 将每个被服务的对象分为4个状态:NOTINITED(被创建)、INITED(已初始化)、STARTED(已启动)、STOPPED(已停止)
- 任何服务状态变化都可以触发另外一些动作
- 可通过组合的方式对任意服务进行组合,以便进行统一管理
事件驱动带来的变化
相比于基于函数调用的编程模型,这种编程方式具有异步,并发等特点,更加高效,因此更适合大型分布式系统
状态机库
状态机由一组状态组成,这些状态分为三类:初始状态、中间状态、最终状态