MapReduce
· JobTracker
• 核心,主,单点
• 调度所有的作业
• 监控整个集群的资源负载
· TaskTracker
• 从,自身节点资源管理
• 和JobTracker心跳,汇报资源,获取Task
· Client
• 作业为单位
• 规划作业计算分布
• 提交作业资源到HDFS
• 最终提交作业到JobTracker
· JobTracker:负载过重,单点故障
· 资源与计算强耦合,其他计算框架需要重复实现资源管理,例如如果用spark也要进行调用,不知道哪个是被MapReduce调用的
· 不同框架对资源不能全局管理
· 1.Client如果有一个map的请求,然后去NN中寻找相关文件的位置
· 2.Client再把请求发送到JT中,TT和JT是通过心跳机制进行通信,TT和JT进行心跳过后,发现有map请求,那么就在数据所在的那个节点,或者空闲临近的节点开始进行map处理
· 3.map完成之后,TT和JT进行心跳通信,发送map完成,需要reduce,那么就JT就选择若干个节点进行reduce
· 4.reduce根据分区拉取对应map节点的数据,最后进行合并
· YARN:解耦资源与计算
• ResourceManager
• 主,核心
• 集群节点资源管理
• NodeManager
• 与RM汇报资源
• 管理Container生命周期
• 计算框架中的角色都以Container表示
• Container:【节点NM,CPU,MEM,I/O大小,启动命令】
• 默认NodeManager启动线程监控Container大小,超出申请资源额度,kill
• 支持Linux内核的Cgroup
· MR
• ApplicationMaster-Container
• 作业为单位,避免单点故障,负载到不同的节点
• 创建Task需要和RM申请资源(Container)
• Task-Container
• 执行任务的单元
· Client
• RM-Client:请求资源创建AM
• AM-Client:与AM交互
· 1.用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
· 2.ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster
· 3.ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7
· 4.ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源
· 5.一旦ApplicationMaster申请到资源后,便与对应的NodeManager(在对应数据所在的节点)通信,要求它启动任务,首先执行map task
· 7.各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务
· 8.应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己
· 6.当map task执行完后,ApplicationMaster会向RM申请资源,申请到后NodeManger,会创建环境,将数据拉去到对应节点,并执行reduce task
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。