Spark 1.6.0 [原文地址]
集群模式概览
本文简要描述了Spark在集群中各个组件如何运行。想了解如何在集群中启动Spark应用,请参考application submission guide 。
组件
Spark应用在集群上运行时,包括了多个独立的进程,这些进程之间通过你的主程序(也叫作驱动器,即:driver)中的SparkContext对象来进行协调。
特别要指出的是,SparkContext能与多种集群管理器通信(包括:Spark独立部署时自带的集群管理器,Mesos或者YARN)。一旦连接上集群管理器,Spark会为该应用在各个集群节点上申请执行器(executor),用于执行计算任务和存储数据。接下来,Spark将应用程序代码(JAR包或者Python文件)发送给所申请到的执行器。最后SparkContext将分割出的任务(task)发送给各个执行器去运行。
这个架构中有几个值得注意的地方:
集群管理器类型
Spark支持以下3中集群管理器:
- Standalone – Spark自带的一个简单的集群管理器,这使得启动一个Spark集群变得非常简单。
- Apache Mesos – 一种可以运行Hadoop MapReduce或者服务型应用的通用集群管理器。
- Hadoop YARN – Hadoop 2的集群管理器。
另外,使用Spark的EC2 launch scripts可以轻松地在Amazon EC2上启动一个独立集群。
提交Spark应用
利用spark-submit脚本,可以向Spark所支持的任意一种集群提交应用。详见:application submission guide
监控
每一个驱动器(driver)都有其对应的web UI,默认会绑定4040端口(多个并存会按顺序绑定4041、4042…),这个web UI会展示该Spark应用正在运行的任务(task)、执行器(executor)以及所使用的存储信息。只需在浏览器种打开http://<driver-node>:4040即可访问。monitoring guide 详细描述了其他监控选项。
作业调度
Spark可以在应用程序之间(集群管理器这一层面)和之内(如:同一个SparkContext对象运行了多个计算作业)控制资源分配。job scheduling overview 描述了更详细的信息。
概念和术语
下表简要说明了集群模式下的一些概念和术语:
术语 | 含义 |
---|---|
Application(应用) | Spark上运行的应用。包含了驱动器(driver)进程(一个)和集群上的执行器(executor)进程(多个) |
Application jar(应用jar包) | 包含Spark应用程序的jar包。有时候,用户会想要把应用程序代码及其依赖打到一起,形成一个“uber jar”(包含自身以及所有依赖库的jar包),注意这时候不要把Spark或Hadoop的库打进来,这些库会在运行时加载 |
Driver program(驱动器) | 运行main函数并创建SparkContext的进程。 |
Cluster manager(集群管理器) | 用于在集群上申请资源的 外部服务(如:独立部署的集群管理器、Mesos或者YARN) |
Deploy mode(部署模式) | 用于区分驱动器进程在哪里运行。在”cluster”模式下,驱动器将运行在集群上某个节点;在”client“模式下,驱动器在集群之外的客户端运行。 |
Worker node(工作节点) | 集群上运行应用程序代码的任意一个节点。 |
Executor(执行器) | 在集群工作节点上,为某个应用启动的工作进程;专门用于运行计算任务,并在内存或磁盘上保存数据。每个应用都独享其对应的多个执行器。 |
Task(任务) | 下发给执行器的工作单元。 |
Job(作业) | 一个并行计算作业,由一组任务(Task)组成,并由Spark的行动(action)算子(如:save、collect)触发启动;你会在驱动器日志中看到这个术语。 |
Stage(步骤) | 每个作业(Job)可以划分为更小的任务(Task)集合,这就是步骤(Stage),这些步骤彼此依赖形成一个有向无环图(类似于MapReduce中的map和reduce);你会在驱动器日志中看到这个术语。 |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/117410.html