声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章
2. 由于是个人总结, 所以用最精简的话语来写文章
3. 若有错误不当之处, 请指出
Yarn架构:
Yarn集群有一个ResourceManager, 每台服务器有一个NodeManager;
每个NodeManager上有一堆Container(资源),
每个Container间相互隔离, 是一台独立的小电脑, 可以运行ApplicationMaster, MapTask等
ApplicationMaster是负责申请Container资源的, 和监控运行的任务(如MR任务)
Yarn工作机制(作业提交全流程):
一, 作业提交 & 运行MRAppMaster
- MR程序提交到客户端所在的节点
- YarnRunner向ResourceManager申请一个Application
- RM返回给YarnRunner一个HDFS路径和ApplicationId
- 该程序将运行所需的数据资源(.split, .xml, .jar)提交到这个HDFS路径上
- 程序的数据资源提交完毕后, 申请运行MRAppMaster
二, 作业初始化
- RM将用户的请求初始化成一个Task, 放到调度队列中
- 其中一个NodeManager从调度队列中领取到Task任务
- 该NodeManager创建容器Container
- Container从HDFS上下载作业的数据资源(.split, .xml, .jar)到本地
三, 任务分配
MRAppMaster向RM申请运行MapTask程序
RM将运行MapTask任务分配给另外两个NodeManager, 另两个NodeManager分别领取任务并创建Container
四, 任务运行
NodeManager启动MapTask
MRAppMaster等待所有MapTask运行完毕后, 向RM申请Container 运行ReduceTask程序
ReduceTask拉取MapTask的计算结果数据
程序运行完毕后, MRAppMaster向RM申请注销自己
资源调度器:
-
FIFO
- 单队列
- 先到先服务
-
Capacity Scheduler(Apache默认)
- 相当于多个FiFO队列, 但默认只有一个default队列
- 先到先服务
- 可以对同一用户提交作业资源进行下载限制
- 可以借调别的队列的闲置资源, 但等人家索要回来的时候必须立刻偿还
-
Fair Scheduler(CDH默认)
-
多队列, 且可以单独配置每个对列
-
优先满足缺额(实际资源与应获资源的差值)大的, 每个任务都能分到资源
-
可以设置job所需资源的下限
-
公平调度器一般大公司用, 并发量最高, 要求机器性能较好
在生产环境下队列怎么创建?
-
按照框架名称:hive、spark、flink
-
按照业务名称:登录、购物车、支付模块、部门1、部门2 (居多)
好处:解耦、降低风险、可以实现任务降级(双十一, 降级不重要的功能, 节省下的资源给支付模块用)