Spark on YARN 是指将 Spark 应用程序运行在 Hadoop YARN 集群上,借助 YARN 的资源管理和调度能力来管理 Spark 的计算资源。这种模式能充分利用现有 Hadoop 集群资源,简化集群管理,是企业中常用的 Spark 部署方式。
核心角色
• Spark 应用:包含 Driver 进程和 Executor 进程。Driver 负责任务调度、逻辑处理;Executor 负责执行具体任务并存储数据。
• YARN 组件:
◦ ResourceManager:集群资源(CPU、内存)的总管理者,负责接收应用的资源请求并分配。
◦ NodeManager:运行在每个节点上,管理本节点的资源,监控容器(Container)的运行。
◦ ApplicationMaster:为每个 Spark 应用启动,向 ResourceManager 申请资源,协调 Executor 运行。
工作流程
-
用户提交 Spark 应用到 YARN,指定资源需求(如内存、CPU 核数)。
-
YARN 的 ResourceManager 分配第一个容器,启动 Spark 的 ApplicationMaster。
-
ApplicationMaster 向 ResourceManager 申请运行 Executor 所需的容器。
-
ResourceManager 分配容器后,ApplicationMaster 通知对应节点的 NodeManager 启动 Executor。
-
Driver(通常与 ApplicationMaster 同进程)与 Executor 通信,分配任务并监控执行。
-
应用运行结束后,ApplicationMaster 向 ResourceManager 注销,释放资源。
优势
• 资源统一管理:与 MapReduce 等其他 YARN 应用共享集群资源,提高资源利用率。
• 弹性伸缩:可根据任务需求动态申请或释放资源,适应负载变化。
• 简化运维:无需单独维护 Spark 集群,降低部署和管理成本。
这种模式让 Spark 能更好地融入 Hadoop 生态,适合需要大规模数据处理且已有 Hadoop 集群的场景。