版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kiss_xiaojie/article/details/77926091
Hadoop —- YARN
- YARN 概述
- YARN 是一种分布式操作系统(Distributed Operating System,DOS),主要作用为:提供用户接口、管理分布式系统资源、控制分布式程序运行(任务调度)。
- YARN 采用 master/slave 架构,slave(NodeManager)进程负责管理本机资源,master(ResourceManager)负责汇总分配各个 slave 上报的资源信息。
ResourceManager
- ResourceManager 中主要的四大模块
- 客户接口模块(主要接口有:web 接口、shell 接口以及 JavaAPI 接口)
- 资源管理模块(汇总各个 slave 上报的资源信息,RTS)
- YARN 把一定量的各类资源抽象成为一个逻辑概念
Container
(容器)。 - 比如,统一规定 <1core,2G> 为一个 Container 。就是说分配、汇总资源时以此为单位。假如,一 slave 机器为 2 核心、4G 内存,该机器上的 NodeManager 进程向 ResourceManager 汇报时就可直接说是 2个 Container。分配时,亦同。这样,大大简化了资源管理模块。
- YARN 把一定量的各类资源抽象成为一个逻辑概念
- 任务调度器(核心,Schedule)
- 支持的调度策略
- FIFO
- Fair:公平(How to do?)
- Capacity:不管当前有多少 application ,只要集群内还有计算资源,都分配给这些应用程序,以确保这些应用程序同时运行。
- 三大调度策略可以嵌套配置(通过队列,How to do?),此外 YARNSchedule 支持热插拔,可动态配置调度器。
- 支持的调度策略
- 任务启动模块(ApplicationsManager)
- 负责管理所有 ApplicationMaster 。理论上一个 ApplicationMaster 对应一个 Yarn-App.
- 当 ResourceManager 接收到新任务(新的 Yarn-App)时,由任务启动模块使用资源管理模块选择一空闲 Container,并在此 Container 上执行应用程序主服务(slave 主机上)。
- ResourceManager 与 NodeManager 之间使用 定期心跳包 进行通信。
- ResourceManager 中主要的四大模块
NodeManager
- ApplicationManager
- ApplicationManager 其实是 Container 上运行的一个实例(程序)。把它单独出来说明是因为,它相当于 Yarn-App 的主线程(指挥部)。
- 由它向 ResourceManager 申请资源。且它得到 ResourceManager 授权后,由它与其他 NodeManager 通信,要求 NodeManger 分配启动对应的 Container。当然,这里面存在令牌验证等安全机制。
- NodeManager 中主要的两大模块
- ContainerManager 模块
- 监控 Container 状态
- 向 ResourceManager 汇报
- ContainerExcutor 模块(用于启动 Container)
- ContainerManager 模块
- ApplicationManager
YARN 编程(编写 Yarn-App)
- 编程的内容分三部分
- ApplicationBusinessLogic
- 主要写业务逻辑
- 由所属并行化范式,确定 ApplicationBusinessLogic 的最终结构
- ApplicationClient
- 提供接口
- 通用性较强,一般由公司的优秀程序员开发
- ApplicationMaster
- 涉及 Container 分层等,很复杂
- 一般由公司的优秀程序员开发
- ApplicationBusinessLogic
- 重头开始编写 Yarn-App 很复杂,实际使用时可以借鉴
- M 范式:DistributedShell
- M-S-R 范式:MapReduce 框架、Spark 框架
- BSP 范式:Giraph 框架
- 编程的内容分三部分
其他一些重要概念或思想
- 常见并行化范式
- M 范式:把全部数据等分成 n 分,各机器(进程)独立处理一份。
- MSR 范式:MapReduce 模型。适合 IO 密集型的松耦合操作,适合全局数据而非增量数据。
- BSP 范式(整体同步并行计算模型)
- 适合处理 CPU 密集型的 紧耦合 操作(如,统计机器学习算法、图处理)。
- 思想:各超步之间串行执行,超步内则并行执行(超步内分有很多块)。
- 先并行化后线程化
- 并行化指的是把任务分到不同的机器上;
- 线程化则为在同一机器内并发处理对应的任务;
- 常见并行化范式