Pyspark学习笔记(二)--- spark部署及spark-submit命令简介
目录
Pyspark学习笔记(二)--- spark部署及spark-submit命令简介
1.Spark的部署模式
1.1 本地模式
1.2 Spark独立集群(Standalone Deploy Mode)
1.3 基于Hadoop YARN 部署
1.4 基于Kubernetes(即k8s)部署
2. spark-submit 命令
1.Spark的部署模式
官方文档参考资料:https://spark.apache.org/docs/latest/cluster-overview.html#cluster-mode-overview
常见的部署模式有:
● 本地模式 ● Spark独立集群(Standalone Deploy Mode) ● 基于Hadoop YARN 部署 ● 基于Apache Mesos部署(最新版本的spark已经启用) ● 基于Kubernetes(即k8s)部署
各个部署模式之间的主要区别在于计算集群中一个或者多个节点之间的资源管理方式。每种Spark部署模式都可以用于交互式(shell)应用和非交互式(批处理)应用。 下面简述一下在不同部署模式下,提交任务的命令;参考资料:Submitting Applications - Spark 3.3.0 Documentation
1.1 本地模式
该模式 运行Spark进程运行在本地机器上,受限于本地机器的资源,一般都是用来进行测试的。
可以看到,master填的local即选择本地模式,且可以写为 local[n] 来选择使用 n个CPU内核;
1.2 Spark独立集群(Standalone Deploy Mode)
Spark独立集群指Spark内建的(“独立的”)调度器,无需任何外部调度器。
在master处填写主进程运行的地址和端口
1.3 基于Hadoop YARN 部署
最常用的部署模式其实就是使用Hadoop提供的YARN资源管理框架,使用YARN作为调度器时,共有两种集群部署模式,一个是集群模式(cluster), 一个是客户端模式(client).
1.4 基于Kubernetes(即k8s)部署
可以看到,这几种部署模式提交作业的方式都是有固定格式的,可谓大同小异,下面将介绍一下提交任务的命令及参数。
2. spark-submit 命令
非交互式应用程序,通过spark-submit命令提交任务,官方讲解如下链接所示 :
Submitting Applications - Spark 3.2.1 Documentation
spark-submit脚本位于spark安装目录下的bin文件夹内,该命令利用可重用的模块形式编写脚本,
以编程方式提交任务到Spark上去,并可以支持不同的集群管理器和Spark支持的部署模式
通用的spark-submit命令为:
代码语言:javascript复制${SPARK_HOME}/bin/spark-submit
--class <main-class>
--master <master-url>
--deploy-mode <deploy-mode>
--conf <key>=<value>
... # other options
<application-jar>
[application-arguments]
命令行参数
下面逐个介绍这些参数:
class | 应用程序的入口点 (e.g. org.apache.spark.examples.SparkPi) |
---|---|
master | 用于设置主结点URL的参数,详情见官方文档,不赘述Submitting Applications - Spark 3.3.0 Documentation |
deploy-mode | 决定将驱动程序部署在工作节点(cluster)上还是作为外部客户端(client) 本地部署(默认:client) |
conf | 键值对格式的任意Spark配置属性;对于包含空格的值,将”key = value”括在引号中,多个配置应作为单独的参数传递。 (例如--conf <key> = <value> --conf <key2> = <value2>) |
<application-jar> | 捆绑jar的路径,包括您的应用程序和所有依赖项。 该URL必须在群集内部全局可见, 例如,所有节点上都存在hdfs:// path或file:// path。 [For Python applications, simply pass a .py file in the place of <application-jar> instead of a JAR, and add Python .zip, .egg or .py files to the search path with --py-files] |
py-files | .py 或者.zip等文件的逗号分隔列表,包括Python应用程序,这些文件将被交付给每一个执行器来使用。 |
[application-arguments] | 传递给主类主方法的参数(如果有) |
name | 应用程序名称;注意,创建SparkSession时,如果是以编程方式指定应用程序名称,那么来自命令行的参数会被重写。 |
files | 命令给出一个逗号分隔的文件列表,这些文件将被交付给每一个执行器来使用。 |
properties-file | 配置文件。它应该有和conf/spark-defaults.conf文件相同的属性设置,也是可读的。 |
queue | 指定资源队列的名称,t (YARN-only) |
version | 打印Spark版本。 |
verbose | 在运行应用程序时打印附加调试信息。 |
help | 展示帮助信息和退出。 |
下面四个参数在执行任务时可能需要根据实际情况调试,以提高资源的利用率,可重点关注一下:
driver-core | 指定驱动程序的内核数量,默认值为1。(yarn-cluster only) |
---|---|
driver-memory | 指定应用程序在驱动程序上分配多少内存的参数; 比如1000M,2G。默认值是1024M。 |
num-executors | 启动的executor数量。默认为2。(YARN-only) |
exectuor-memory | 指定每个executor为应用程序分配多少内存。默认值是1G。 |
executor-core | 每个executor的核数。(Spark standalone and YARN only),在yarn模式中默认值为1 |
关于这几个专业术语的含义官方也有解释: Cluster Mode Overview - Spark 3.3.0 Documentation 我节选了几个写在这里,更全面的解释请查看参考文档:
Driver program | 运行应用程序的main()函数并创建SparkContext的进程 |
---|---|
Cluster manager | 获取集群资源的外部服务(例如独立管理器、Mesos、YARN、Kubernetes) |
Worker node | 可以在集群中运行应用程序代码的任何节点 |
Executor | 是集群中工作节点(Worker)中的一个 JVM 进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行。 |
#############################################################################
更多的参数可以自己使用 --help 查看: