集群模式概述
本文简要地概述一下Spark是如何在集群上运行的,方便理解Spark以及相关的组件。如何向集群提交应用程序参阅应用程序提交指南 。
组件
Spark应用程序在集群上运行由一系列的独立的进程组成,进程相互之间由主程序(称为驱动程序 )SparkContext协调。而且,集群上运行SparkContext可以连接多种类型的 集群管理器 (Spark的独立集群管理器或mesos/yarn),这些集群管理器负责为应用程序分配资源。 一旦连接,Spark获得集群中的节点的执行器 , 这些执行器负责为应用程序运行计算以及存储数据。 接下来,它将发送您的应用程序代码(传递给SparkContext的JAR或Python文件)到执行器。 最后,SparkContext发送 任务给执行器。
下面是一些需要注意的关于这个架构有用的东西:
1. 每个应用程序都有自己的执行器进程,这些进程将贯穿整个应用程序的生命周期以及在多个线程中运行任务。不管是在调度端(每个驱动安排自己的任务)和执行器端(不同应用程序的任务运行在不同的jvm), 隔离应用程序都有好处,。然而,这也意味着数据不能跨不同的Spark(SparkContext实例)共享,除非将数据先存放到外部存储系统再共享。
2. 底层集群管理器对Spark是透明的。只要能获得执行器进程及它们之间能相互通信,这让Spark在集群管理器上运行相对容易,即使该集群管理器还支持其他应用程序(例如mesos/yarn)。
3. 驱动程序在它的生命周期必须监听和接受连接的执行器的输入 (请参阅 spark.driver.port和spark.fileserver.port网络配置章节 )。 因此,驱动程序在网络中必须能被工作节点寻址找到。
4. 因为驱动在集群上调度任务,它应该在工作节点附近运行,最好在同一局域网内。如果你想发送请求给远程集群,最好让驱动程序开一个RPC,并且让它在工作节点附近提交操作而不是直接在远离工作节点的地方提交操作。
集群管理器类型
系统目前支持三个集群管理器:
· Standalone – Spark自带的一个简单的集群管理器,使用它设置集群很容易。
· Apache Mesos – 普通的集群管理器,它还可以运行Hadoop MapReduce和服务应用程序。
· Hadoop yarn Hadoop 2的资源管理器。
此外,Spark的 EC2启动脚本 可以很方便地在Amazon EC2上启动一个独立集群。
提交的应用程序
使用 spark-submit脚本可以把应用程序提交任何类型的集群。参见 应用程序提交指南 。
监控
每个驱动程序都有一个web UI,通常在端口4040上,显示运行任务、执行器和存储使用的信息。 http:// < driver-node >:4040 在web浏览器中直接打开即可。监控指导 描述其他监视选项。
作业调度
Spark给出了跨应用程序(在集群管理的层次)和应用程序内(如果多个计算发生在同一SparkContext)的资源分配控制。 参见作业计划概述 。
术语表
下面的表列出了将来会用到的一些集群概念的术语:
术语 |
意义 |
Application(应用程序) |
在Spark上构建的用户程序。 由在集群上的driver program(驱动程序)和executors (执行器)组成。 |
Application jar (应用程序jar) |
包含用户的Spark的应用程序jar包。在某些情况下,用户将需要创建一个包含应用程序和 所有它的依赖项的 “uber jar”,但请注意,千万不要包括Hadoop或Spark库,这些在运行时将 被添加。 |
Driver program(驱动程序) |
运行应用程序的main()函数和创建SparkContext |
Cluster manager(集群管理器) |
获取集群上资源的外部服务(如独立管理器,Mesos,YARN) |
Deploy mode(部署模式) |
区别在于驱动程序在哪运行。 在“集群”模式下,框架在集群内启动驱动。 在“客户端”模式下,提交者启动在集群外启动驱动程序。 |
Worker node(工作节点) |
在集群中运行应用程序代码的任何节点 |
Executor(执行器) |
在工人节点上启动应用程序的进程,并负责运行任务和在内存或磁盘存储数据. 每个应用程序都有自己的执行器。 |
Task(任务) |
工作单元,将被送到执行器 |
Job(工作) |
包含多个任务的并行计算,这些任务获得Spark动作的响应(如save(保存), collect(收集))\ 您将看到这个词被用在驱动的日志中。 |
Stage(阶段) |
每个工作被分成较小的相互依赖的任务阶段 (类似于MapReduce的map和reduce阶段), 您将看到这个词被用在驱动的日志中。 |