Spark 集群模式概述
本文档简要概述了Spark如何在群集上运行,以使您更容易理解所涉及的组件。通读应用程序提交指南, 以了解有关在集群上启动应用程序的信息。
组件
Spark应用程序在群集上作为独立的进程集运行,由SparkContext 主程序中的对象(称为驱动程序)协调。
具体来说,要在集群上运行,SparkContext可以连接到几种类型的集群管理器 (Spark自己的独立集群管理器Mesos或YARN),它们可以在应用程序之间分配资源。连接后,Spark会在集群中的节点上获取执行程序,这些节点是运行计算并为您的应用程序存储数据的进程。接下来,它将您的应用程序代码(由传递给SparkContext的JAR或Python文件定义)发送给执行者。最后,SparkContext将任务发送给执行程序以运行。
关于此体系结构,有几点有用的注意事项:
- 每个应用程序都有其自己的执行程序进程,该进程在整个应用程序期间保持不变,并在多个线程中运行任务。这样的好处是可以在调度方面(每个驱动程序调度自己的任务)和执行者方面(来自不同应用程序的任务在不同JVM中运行)彼此隔离应用程序。但是,这也意味着,如果不将数据写入外部存储系统,则无法在不同的Spark应用程序(SparkContext实例)之间共享数据。
- Spark与基础群集管理器无关。只要它可以获取执行程序进程,并且它们彼此通信,即使在还支持其他应用程序(例如Mesos / YARN)的集群管理器上运行它,也是相对容易的。
- 驱动程序在其整个生命周期中必须侦听并接受其执行程序的传入连接(例如,请参见网络配置部分中的spark.driver.port)。这样,驱动程序必须是可从工作程序节点访问的网络。
- 由于驱动程序在群集上调度任务,因此应在工作节点附近运行,最好在同一局域网上运行。如果您想将请求远程发送到集群,最好是将RPC打开到驱动程序,并让它从附近提交操作,而不是在远离工作节点的地方运行驱动程序。
集群管理器类型
该系统当前支持几个集群管理器:
- 单机版 – Spark附带的简单群集管理器,可轻松设置群集。
- Apache Mesos –通用集群管理器,也可以运行Hadoop MapReduce和服务应用程序。
- Hadoop YARN – Hadoop 2中的资源管理器。
- Kubernetes –一个开源系统,用于自动化容器化应用程序的部署,扩展和管理。
存在第三方项目(Spark项目不支持)来添加对 Nomad作为群集管理器的支持。
提交申请
可以使用spark-submit脚本将应用程序提交到任何类型的集群。在提交申请指南介绍了如何做到这一点。
监控方式
每个驱动程序都有一个Web UI,通常在端口4040上,该Web UI显示有关正在运行的任务,执行程序和存储使用情况的信息。只需http://<driver-node>:4040在Web浏览器中转到即可访问此UI。该监视指南还介绍了其他的监控选项。
作业调度
Spark可以控制跨应用程序(在集群管理器级别)以及在应用程序内(如果在同一SparkContext上进行了多次计算)资源分配。该作业调度概述描述得更详细。
词汇表
下表总结了您将用来指代集群概念的术语:
术语 | 含义 |
应用 | 基于Spark的用户程序。由群集上的驱动程序和执行程序组成。 |
应用罐 | 一个包含用户的Spark应用程序的jar。在某些情况下,用户将希望创建一个包含其应用程序及其依赖项的“超级jar”。用户的jar绝不应该包含Hadoop或Spark库,但是这些库将在运行时添加。 |
驱动程式 | 运行应用程序的main()函数并创建SparkContext的过程 |
集群管理员 | 用于在群集上获取资源的外部服务(例如,独立管理器,Mesos,YARN) |
部署方式 | 区分驱动程序进程的运行位置。在“集群”模式下,框架在集群内部启动驱动程序。在“客户端”模式下,提交者在群集外部启动驱动程序。 |
工作节点 | 可以在集群中运行应用程序代码的任何节点 |
执行者 | 为工作节点上的应用程序启动的进程,该进程运行任务并将数据跨任务存储在内存或磁盘存储中。每个应用程序都有自己的执行程序。 |
任务 | 一种工作单元,将发送给一个执行者 |
工作 | 甲并行计算由该获取响应于火花动作催生多个任务(例如save,collect); 您会在驱动程序的日志中看到该术语。 |
阶段 | 每个作业被分为较小的任务集,称为相互依赖的阶段(类似于MapReduce中的map和reduce阶段);您会在驱动程序的日志中看到该术语。 |