1.工作流程
- 系统的输入输出
- 上传输入数据到HDFS
- 将打包的jar作为作业提交作业到YARN
- YARN对作业进行调度和执行,执行过程中从HDFS读取数据,将结果数据写入HDFS
- 从HDFS读取结果数据
- YARN进行作业调度和执行的工作流程
步骤 1
上传用户程序、
ApplicationMaster 程序
到HDFS,然后提交作业的描述信息(作业文件位置,程序执行脚本命令)。
步骤 2
Applications Manager创建相应的Application状态机管理应用的信息和状态,
ResourceManager 为该应用程序分配第一个 Container(资源,URL),并与对应的 NodeManager 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster(
三层多叉树
进行作业控制
)。
步骤 3 ApplicationMaster 首先向 ResourceManager 注册,这样用户可以直接通过ResourceManage 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤 4~7。
步骤 4 ApplicationMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。
步骤 5 一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务。
步骤 6 NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将任务启动命令(+分配的资源信息)写到一个脚本中,并通过运行该脚本启动任务(执行程序)。
步骤 7 各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
在应用程序运行过程中,用户可随时通过 RPC 向 ApplicationMaster 查询应用程序的当前运行状态。
步骤 8 应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。
2.工作流程的具体实现
- 整体实现:
- 划分子构件,根据不同的功能和职责设计不同的构件,构件之间通过事件系统进行通信和协作(静态类图)。(任务执行:ContainerLauncher,ResourceLocationService,ContainerExecutor)
- 工作流程的细化,通过序列图梳理功能的具体实现流程(函数)。
- 关键点:
步骤 1
上传用户程序、
ApplicationMaster 程序
到HDFS,然后提交作业的描述信息(作业文件位置,程序执行脚本命令)。
- YARN根据提交的配置信息对数据集进行切分从而将对处理一个数据集的作业切分成处理多个子数据集的任务,然后对任务进行调度和执行
- 提交的JAR作为任务执行的关键点(回调机制)
- Jar中本身有一个MapTask函数和ReduceTask函数,Hadoop编程框架带的
- client在提交作业前会对用户写的主函数进行执行,将设置的作业配置信息写入job.xml
- nodeManager在执行时则通过命令执行调用MapTask和ReduceTask的类的main函数,而不是用户写的主函数,并在执行的过程中根据Job.xml动态执行
步骤 2
Applications Manager创建相应的Application状态机管理应用的信息和状态,
ResourceManager 为该应用程序分配第一个 Container(资源,URL),并与对应的 NodeManager 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster
。
- ApplicationMater使用三层多叉树进行作业控制(JobTracker)
步骤 4
ApplicationMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。
- ApplicationMaster采用增量型的资源请求方式
- ResourceManager创建Application状态机和NodeManager状态机,然后进行请求和资源之间的调度分配
步骤 6 NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,
将任务启动命令(+分配的资源信息)写到一个脚本中,并
通过运行该脚本启动任务(执行程序)。
3.系统整体实现:功能构件以及连接件(系统架构)
- 功能构件
- 构件都是基于线程实现的一个个可独立运行的实体,使用统一的服务模型对其进行管理(init,start,stop)
- 组合构件:单一构件实例化后注册到组合构件,然后通过组合构件统一的进行构件的init,start和stop(组合模式)
3.
主要工作方式:循环的产生事件,被动的接收事件处理事件(观察者模式)
- 连接件
- 状态机<四元组>