Hadoop YARN
YARN
通用的统一资源管理系统: 同时运行长应用程序和短应用程序
长应用程序: 通常情况下,永不停止运行
短应用程序: 短时间(秒、分钟、小时、数月)内会运行结束的程序
ResourceManager
全局的资源管理器,整个集群只有一个,负责集群资源的统一管理和调度分配。
功能:
- 处理客户端请求run jar — client获取ApplicationMaster
- 启动/监控ApplicationMaster
- 监控NodeManager
- 资源分配与调度
NodeManager
NodeManager管理抽象容器,这些容器代表可供应该特定应用程序使用的针对每个节点的资源。(yarnchuld)
定时地向ResourceManager汇报本节点上资源使用情况和各个container的运行情况
功能:
- 单个节点上的资源管理和任务管理(监控生命周期)
- 处理来自ResourceManager的命令
- 处理来自ApplicationMaster的命令
ApplicationMaster
管理一个在YARN内运行的应用,这个应用在每个container中的进程都交给ApplicationMaster管理
功能:
- 数据切分(找寻数据在那个节点上,并且在这个节点上启动container)
- 为应用程序申请资源,并进一步分配给内部任务
- 任务监控与容错
- 负责协调来自ResourceManager的资源,并通过NodeManager监控容器的执行和资源使用(cpu、内存等资源分配)
container
YARN的资源抽象,封装弄节点上多维度资源时,如内存、CPU、磁盘、网络等,当ApplicationMaster向ResourceManager申请资源时,ResourceManager向ApplicationMaster返回的资源是用container表示的。
YARN会为每一个任务分配应该container,而且该任务只能使用该container中描述资源
功能:
- 对任务运行环境的抽象
- 描述一系列信息
- 任务运行资源(节点、内存、CPU)
- 任务启动命令
- 任务运行环境
YARN架构图
YARN运行流程
- clien端进行提交任务 代码块(mr),打成jar包
- 进入到ResourceManager,ResourceManager会将任务放到应该队列中,因为分配的资源有限,所以遵循FIFO(先进先出)的策略
- 启动ApplicationMaster(每个应用对应启动一个)
- ApplicationMaster也是一个进程,这个进程也需要资源,container也需要,所有会在所有的DataNode中生成一个container,不是为了运行代码,而是专门为ApplicationMaster进行使用的
- 启动container中的ApplicationMaster进程
- ApplicationMaster启动后会向ResourceManager进行注册,然后反向进行资源申请
- ResourceManager会将资源以列表的形式分发给ApplicationMaster
- ApplicationMaster会找到相应的container,进行任务的运行
- 启动container中的任务进程(yarnchild)
- 进行监控,监控任务运行的状态和运行速度,故障切换
- ApplicationMaster会一直进行监控,直到最后一个container运行完毕
- container就会被收回
- ApplicationMaster会取消和ResourceManager的注册
- 进程自行毁掉