apache-spark - Application Master 或 Cluster Manager 是否启动容器/执行程序 - Spark?
问题描述
假设我们有一个在集群模式下运行的 spark 作业,其中集群管理器是 YARN。
在集群模式下
- 用户向集群管理器提交预编译的 JAR、Python 脚本。集群管理器然后告诉特定节点管理器启动应用程序主控。
- 然后 Spark 驱动程序在 Application Master 上运行。驱动程序将包含转换和操作的用户代码转换为称为 DAG 的逻辑计划。然后将 DAG 转换为物理执行计划
- 然后,应用程序主控器与集群管理器通信并协商资源。请求诸如首选执行器位置和容器数量等资源。
此时是集群管理器分配 YARN 容器还是应用程序主机分配 YARN 容器?集群管理器是否也创建了 Spark 执行器,或者应用程序主控器是否这样做?
解决方案
- 提交给 YARN 的 Spark 应用程序将转换为 YARN
应用程序。 - 因此,当客户端向资源管理器(Yarn 组件)提交新的应用程序/作业请求时。
- 资源管理器 (RM) 接受作业请求并分配一个
容器来为给定的应用程序/作业启动 Application Master。
Application Master 可以被认为是一个专门的容器,
它将管理/监视应用程序/作业任务。 - Application Master 向 Resource Manager 发送请求,请求
运行应用程序/作业所需的资源。 - 资源管理器返回一个容器
列表以及可以在其上生成的辅助节点列表。
Application Master在每个指定的辅助节点上启动容器(在 spark 称为执行器的情况下)。
首先要了解的事实是:每个 Spark 执行器都作为 YARN 容器运行。这一点以及应用程序的 Spark 执行程序是固定的,分配给每个执行程序的资源也是固定的,Spark 应用程序在其整个持续时间内占用资源。这与 MapReduce 应用程序相反,后者在每个任务结束时不断返回资源,并在下一个任务开始时再次分配。
推荐阅读
- javascript - 正则表达式在模式后捕获数字
- arrays - 如何制作数组的np数组
- javascript - 在 React 的 useEffect() 钩子中使用 setInterval() 之前尝试进行 API 调用
- python - 堆积条形图X轴给出错误的顺序python plotly
- apache-httpclient-5.x - Apache HTTPClient5 - 如何防止连接/流被拒绝
- java - 检查一个键是 JSONObject 中的数组或字符串
- sql - etext 格式的长度大小(BI 报告)
- java - java.net.SocketException:尝试从spark sql java应用程序将数据加载/写入redis时连接重置异常
- ruby - 从 Rails 服务器运行 ruby system(),包括 gem 访问
- c# - 使用 OxyPlot 获取范围的坐标