与MRv1的JobTracker相比,yarn的实现要复杂很多,在借鉴MRv1的一些底层基础库(RPC框架)的基础上,引入了很多新内容,基础库更多
YARN 基础库是其他一切模块的基础, 它的设计直接决定了 YARN 的稳定性和扩展性,
概括起来, YARN 的基础库主要有以下几个。
❑ Protocol Buffers : Protocol Buffers 是 Google 开源的序列化库, 具有平台无关、 高
性能、 兼容性好等优点。 YARN 将 Protocol Buffers 用到了 RPC 通信中, 默认情况
下, YARN RPC 中所有参数采用 Protocol Buffers 进行序列化 / 反序列化, 相比于
MRv1 中基于自定义 Writable 框架的方式, YARN 在向后兼容性、 扩展性等方面提
高了很多。
❑ Apache Avro : Avro 是 Hadoop 生态系统中的 RPC 框架, 具有平台无关、 支持动态
模式(无需编译) 等优点, Avro 的最初设计动机是解决 YARN RPC 兼容性和扩展性
差等问题, 目前, YARN 采用 Avro 记录 MapReduce 应用程序日志(用于故障后应
用程序恢复), 今后可能代替 Protocol Buffers 作为 RPC 辅助库(至少会作为一个可
选方案)。
❑ RPC 库 : YARN 仍采用了 MRv1 中的 RPC 库, 但其中采用的默认序列化方法被替
换成了 Protocol Buffers。
❑ 服务库和事件库 : YARN 将所有的对象服务化, 以便统一管理(比创建、 销毁等),
而服务之间则采用事件机制进行通信, 不再使用类似 MRv1 中基于函数调用的方式。
❑ 状态机库 : 状态机是一种表示有限个状态以及在这些状态之间的转移和动作等行为
的数学模型。 在 YARN 中, 很多对象都是由若干状态组成的, 且当有事件发生时,
状态之间会发生转移, 比如作业、 任务、 Container 等, 而 YARN 正是采用有限状
态机描述一些对象的状态以及状态之间的转移。 引入状态机模型后, 相比 MRv1,
YARN 的代码结构更加清晰易懂了。