翻译: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_running_spark_apps.html
版本: 5.14.2
您可以在本地运行Spark应用程序,也可以通过使用交互式shell或通过提交应用程序在集群中分布运行Spark应用程序。以交互方式运行Spark应用程序通常在数据探索阶段和临时分析期间执行。
由于Scala编译代码的方式存在限制,因此在交互式shell中运行嵌套定义的应用程序可能会遇到 Task not serializable 异常。Cloudera建议提交运行这些应用程序。
要运行分布在集群中的应用程序,Spark需要一个集群管理器。Cloudera支持两个群集管理器:YARN和Spark Standalone。当在YARN上运行时,Spark应用程序进程由YARN ResourceManager和NodeManager角色管理。当在Spark Standalone上运行时,Spark应用程序进程由Spark Master和Worker角色管理。
在CDH 5中,Cloudera建议在YARN群集管理器上而不是在Spark Standalone群集管理器上运行Spark应用程序,以获得以下好处:
- 您可以在YARN上运行的所有框架之间动态共享和集中配置相同的群集资源池。
- 您可以使用YARN调度程序的所有功能对工作负载进行分类,隔离和优先化。
- 您选择要使用的执行程序的数量; 相反,Spark Standalone需要每个应用程序在集群中的每个主机上运行一个执行程序。
- Spark可以针对启用了Kerberos的Hadoop集群运行,并在其进程之间使用安全身份验证。
有关监视Spark应用程序的信息,请参阅监视Spark应用程序。
继续阅读:
提交Spark应用程序
要提交由Python文件或已编译和打包的Java或Spark JAR组成的应用程序,请使用 spark-submit 。
spark-submit语法
spark-submit --option value \
application jar | python file [application arguments]
例子:在YARN上运行SparkPi演示了如何运行一个示例应用程序, SparkPi,与Spark包装在一起。它计算出pi的近似值。
spark-submit参数
选项 | 描述 |
---|---|
application jar | 包含Spark应用程序的JAR文件的路径。对于客户端 部署模式,路径必须指向本地文件。对于集群部署模式,路径可以是本地文件,也可以是集群内全局可见的URL; 请参阅高级依赖关系管理。 |
python file | 包含Spark应用程序的Python文件的路径。对于客户端 部署模式,路径必须指向本地文件。对于集群部署模式,路径可以是本地文件,也可以是集群内全局可见的URL; 请参阅高级依赖关系管理。 |
application arguments | 参数传递给你的应用程序的主要方法。 |
spark-submit选项
你指定 spark-submit 参数, 使用–optionvalue 的形式,而不是 –option=value. (使用空格而不是等号。)
选项 | 描述 |
---|---|
class | 对于Java和Scala应用程序,包含应用程序main方法的类的完全限定类名。例如,org.apache.spark.examples.SparkPi。 |
conf | spark配置属性 以key=value的格式。对于包含空格的值,用引号括起“key=value ”(如所示)。 |
deploy-mode | 部署模式:cluster、client 。在集群模式下,dirver在工作主机上运行。在客户端模式下,driver作为外部客户端在本地运行。对生产作业使用群集模式; 客户端模式更适用于交互和调试用途,希望立即看到您的应用程序输出。要查看在YARN上运行的部署效果 ,请参阅部署模式。默认:client。 |
driver-class-path | 传递给驱动程序的配置和类路径 。添加了–jar的JAR自动包含在类路径中。 |
driver-cores | 集群模式下驱动程序使用的内核数量。默认值:1。 |
driver-memory | 分配给驱动程序的最大堆大小(表示为JVM字符串;例如1024m,2g等)。或者,您可以使用spark.driver.memory 属性。 |
files | 逗号分隔的文件列表将放置在每个执行程序的工作目录中。对于 客户端部署模式,路径必须指向本地文件。对于集群部署模式,路径可以是本地文件,也可以是集群内全局可见的URL; 请参阅高级依赖关系管理。 |
jars | 在集群模式下或在客户端模式下 加载到类路径中其他JAR。对于客户端部署模式,路径必须指向本地文件。对于集群部署模式,路径可以是本地文件,也可以是集群内全局可见的URL; 请参阅高级依赖关系管理。 |
master | 运行应用程序的位置。 |
packages | 包含在驱动程序和执行程序类路径中的JAR,以Maven坐标表示的使用逗号分隔的列表。本地Maven,Maven中心和远程存储库在中指定repositories 都被按照顺序进行搜索。坐标的格式是 groupId:artifactId:version. |
py-files | 逗号分隔的.zip,.egg或.py文件的列表 ,在PYTHONPATH下。对于客户端部署模式,路径必须指向本地文件。对于集群部署模式,路径可以是本地文件,也可以是集群内全局可见的URL; 请参阅高级依赖关系管理。 |
repositories | 以逗号分隔的远程仓库列表,用来搜索中指定的Maven坐标包。 |
Master Values
Master | 描述 |
---|---|
local | 使用一个工作线程在本地运行Spark(即,无并行)。 |
local[K] | 使用 K 工作线程在本地运行Spark 。(理想情况下,将其设置为主机上的核心数量。) |
local[*] | 使用与主机上的逻辑内核一样多的工作线程在本地运行Spark。 |
spark://host:port | 在指定的主机和端口上使用Spark Standalone群集管理器和Spark Master(默认情况下为7077)运行。 |
yarn | 使用YARN集群管理器运行。群集位置由HADOOP_CONF_DIR or YARN_CONF_DIR. 确定。请参阅配置环境。 |
群集执行概述
Spark通过驱动程序编排其操作。当驱动程序运行时,Spark框架将初始化用于处理数据的集群主机上的执行程序进程。将Spark应用程序提交到群集时会发生以下情况:
- 驱动程序启动并调用main方法在Spark应用程序中。
- 驱动程序向集群管理器请求资源以启动执行程序。
- 集群管理器代表驱动程序启动执行程序。
- 驱动程序运行该应用程序。基于应用程序中的转换和操作,驱动程序将任务发送给执行者。
- 任务在执行程序上运行以计算并保存结果。
- 如果启用动态分配,则在执行程序空闲指定的时间段后,它们将被释放。
- 当driver的 main方法退出或调用 SparkContext.stop 它会终止任何未完成的执行程序并从集群管理器释放资源。