!(https://img2020.cnblogs.com/blog/1372882/202008/1372882-20200821114105043-936181839.png)
步骤
- 1、Spark Yarn Client 向 Yarn 中提交应用程序。
- 2、ResourceManager 收到请求后,在集群中选择一个 NodeManager,并为该应用程序分配一个 Container,在这个 Container 中启动应用程序的 ApplicationMaster, ApplicationMaster 进行 SparkContext 等的初始化。
- 3、ApplicationMaster 向 ResourceManager 注册,这样用户可以直接通过 ResourceManager 查看应用程序的运行状态,然后它将采用轮询的方式通过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束。
- 4、ApplicationMaster 申请到资源(也就是Container)后,便与对应的 NodeManager 通信,并在获得的 Container 中启动 CoarseGrainedExecutorBackend,启动后会向 ApplicationMaster 中的 SparkContext 注册并申请 Task。
- 5、ApplicationMaster 中的 SparkContext 分配 Task 给 CoarseGrainedExecutorBackend 执行,CoarseGrainedExecutorBackend 运行 Task 并向ApplicationMaster 汇报运行的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
- 6、应用程序运行完成后,ApplicationMaster 向 ResourceManager申请注销并关闭自己。
Resourcemanager
- 处理客户端请求
- 启动/监控ApplicationMaster
- 监控NodeManager
-
Nodemanger
单个节点上的资源管理和任务管理
- 处理来自ResourceManager的命令
-
ApplicationMaster
数据切分
- 为应用程序申请资源,进一步分配给内部任务
-
Container
任务运行资源(节点,cpu,内存)
- 任务启动命令
- 任务运行环境
当一个单例对象和某个类共享一个名称时,这个单例对象称为 伴生对象。 同理,这个类被称为是这个单例对象的伴生类。类和它的伴生对象可以互相访问其私有成员。使用伴生对象来定义那些在伴生类中不依赖于实例化对象而存在的成员变量或者方法。