目录 [−]
这篇文章简要介绍了怎么将Spark运行在集群之上, 便于理解其使用的组件。 你可能需要阅读应用提交指南了解如何提交应用到Spark集群中。
组件
Spark应用程序在集群中以独立的进程运行, 由你的主程序(称之为驱动程序diver program)的SparkContext协调运行。 具体而言, 为了在Spark集群中运行应用, SparkContext可以连接几种类型的集群管理器cluster managers (既可以是Spark自己的独立集群管理器,也可以是第三方的比如Mesos/YARN), 管理器负责跨应用分配资源. 一旦连接成功,Spark获得集群节点上的executors, executor是为你的应用运行计算和存储数据的进程。 接下来它会发送你的应用代码(传给SparkContext的JAR 或者Python文件) 给executors. 最后SparkContext发送任务tasks让executor来运行.
此架构中需要注意的几个有用的东东:
1) 每个应用只能得到它自己的executor进程。 服务于整个程序的生命周期, 并使用多个线程来运行任务。 这样设计有利于隔离应用, 包括任务调度scheduling side (每个驱动只调度自己的任务) 和executor(来自不同的应用的任务只运行在自己相应的JVM上). 但是, 这也意味着如果不把数据写入到共享存储系统中的话数据不能在Spark application (SparkContext实例)之间共享.
2) Spark不知道使用的底层集群管理器. 它可以请求executor进程, 并彼此交流,这些都可以相对容易的运行在集群管理器之上。 这些集群管理器如Mesos/YARN也可以支持其它应用.
3) 由于驱动程序在集群上调度任务, 它应该运行在很近的worker节点上, 优先运行于本地网络上的节点. 如果你想发送请求到远程的集群,最好使用RPC从集群本地网络提交,而不是远程使用worker节点. (译者按:网络传输的速度会影响性能,并带来不稳定性)
集群管理器类型
当前Spark支持下面三种集群管理器:
- Standalone – Spark自带的简单的集群管理器, 很容易的建立Spark集群.
- Apache Mesos – 一个通用的集群管理器,可以运行Hadoop MapReduce和其它服务应用.
- Hadoop YARN – Hadoop 2提供的管理器.
另外 Spark’s EC2 launch scripts 可以帮助你容易地在Amazon EC2上启动standalone cluster.
提交应用
使用spark-submit脚本可以提交应用到任意类型的集群服务器中. 应用提交指南介绍了这方面的内容.
监控
每个驱动程序都有一个WEB UI, 缺省使用4040, 用来显示运行的tasks, executors, 存储等信息。 用浏览器打开http://
Job调度
Spark可以控制跨应用的资源分配。(在集群管理器层) 或者在应用内部(如果在同一个SparkContext有多个计算时). job 调度概览 描述了细节.
词汇表
下面的表格总结一些术语。
术语 | 意义 |
---|---|
Application | 建立在Spark上的应用. 包括一个驱动程序和集群上的executor. |
Application jar | 一个包含用户Spark application的jar文件. 某些情况下用户可能会把一些依赖同应用都打进一个jar文件中, 但是这个jar文件不应包含Hadoop 或者 Spark 库, 在运行时它们会被加上. |
Driver program | 运行应用的main()函数的进程, 并创建SparkContext |
Cluster manager | 在集群上分配资源的外部服务(如 standalone manager, Mesos, YARN) |
Deploy mode | 区分驱动进程是怎样运行的. 在cluster 模式下,框架会在集群中启动驱动,在client 模式下, 提交者在集群外部启动驱动 |
Worker node | 集群中运行应用代码的节点 |
Executor | 在worker节点上为应用启动的进程, 运来运行任务task, 在内存或磁盘上中保存数据。 每个应用都有它自己的executor |
Task | 发送给一个executor的工作单元 |
Job | 包含多个task的一个并行计算。根据Spark action(如 save, collect)而创建。可以在驱动的log日志中看到此术语 |
Stage | 每个job被分成一撮task, 称之为stage。 (类似MapReduce的map/reduce stage); 可以在驱动的log日志中看到此术语. gets divided into smaller sets of tasks called stages that depend on each other (similar to the map and reduce stages in MapReduce); you'll see this term used in the driver's logs. |