note
文章目录
- note
- 一、Spark的常用启动方式
- 1.1 local本地模式
- 1.2 Standalone模式
- 1.3 Spark on Yarn模式
- 二、spark-submit 详细参数说明
- --master
- --deploy-mode
- --class
- --name
- --jars
- --packages
- --exclude-packages
- --repositories
- --py-files
- --files
- --conf PROP=VALUE
- --properties-file
- --driver-memory
- --driver-java-options
- --driver-library-path
- --driver-class-path
- --driver-cores
- --executor-memory
- --total-executor-cores
- --num-executors
- --executor-core
- 参数设置
- 三、模块依赖问题
- Reference
一、Spark的常用启动方式
1.1 local本地模式
spark单机运行,开发测试,可以local[N]
来设置使用N个线程,每个线程有一个core。spark-submit默认是spark-submit --master local
,spark-shell默认是spark-shell --master local。
注:
(1)只需要把Spark的安装包解压后,改一些常用的配置即可使用,而不用启动Spark的Master、Worker守护进程,也不用启动Hadoop的各服务(除非需要用到HDFS)。
(2)SparkSubmit进程既是客户提交任务的Client进程、又是Spark的driver程序、还充当着Spark执行Task的Executor角色。
1.2 Standalone模式
1.3 Spark on Yarn模式
Yarn 模式是把资源统一交给 Yarn 集群来管理,其优点在于实现了 application 的多样性,如 MapReduce 程序、HBase 集群、Storm 集群、spark 集群等;
Yarn 模式有两种运行模式:client 和 cluster,区别在于
- client 模式的 Driver 运行在 client 端,而 client 端可能是 spark 集群内节点,也可以不是,一般来说不是集群内节点,这就需要在客户端节点上安装程序运行所需环境,以支持 spark 的正常执行;
- cluster 模式的 Driver 运行在 spark 集群中的某个 NodeManager 上,而且不确定到底是哪个 NodeManager 上,这由 spark 的调度策略决定,
如果知道了在哪个节点,在该节点上安装程序运行所需环境即可,
但是事实是哪个节点都有可能,这意味着需要在所有节点上安装程序运行所需环境,显然这不是个好办法;
随着 application 的增加,需要不断安装新的包,而且不同 application 可能存在版本问题,这对于 client 模式来说或许还可以接受,但 cluster 模式肯定不行的,如果集群很大,装环境会很麻烦。
一句通俗的话描述 Pyspark On Yarn:Driver 从本地电脑获取环境后分发给 Container 来执行。
二、spark-submit 详细参数说明
–master
master 的地址,提交任务到哪里执行,例如 spark://host:port, yarn, local
MASTER_URL:设置集群的主URL,用于决定任务提交到何处执行。
常见的选项有
local:提交到本地服务器执行,并分配单个线程
local[k]:提交到本地服务器执行,并分配k个线程
spark://HOST:PORT:提交到standalone模式部署的spark集群中,并指定主节点的IP与端口
mesos://HOST:PORT:提交到mesos模式部署的集群中,并指定主节点的IP与端口
yarn:提交到yarn模式部署的集群中
–deploy-mode
在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client
DEPLOY_MODE:设置driver启动的位置,可选项如下,默认为client
client:在客户端上启动driver,这样逻辑运算在client上执行,任务执行在cluster上
cluster:逻辑运算与任务执行均在cluster上,cluster模式暂时不支持于Mesos集群或Python应用程序
–class
应用程序的主类,仅针对 java 或 scala 应用
CLASS_NAME:指定应用程序的类入口,即主类,仅针对java、scala程序,不作用于python程序
–name
应用程序的名称
–jars
用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下
–packages
包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标
–exclude-packages
为了避免冲突 ,指定的参数–package中不包含的jars包
–repositories
远程 repository
附加的远程资源库(包含jars包)等,可以通过maven坐标进行搜索
–py-files
PY_FILES:逗号隔开的的.zip、.egg、.py文件,这些文件会放置在PYTHONPATH下,该参数仅针对python应用程序
–files
FILES:逗号隔开的文件列表,这些文件将存放于每一个工作节点进程目录下
–conf PROP=VALUE
指定spark配置属性的值,格式为PROP=VALUE, 例如 --conf spark.executor.extraJavaOptions=“-XX:MaxPermSize=256m”
–properties-file
指定需要额外加载的配置文件,用逗号分隔,如果不指定,默认为 conf/spark-defaults.conf
–driver-memory
Driver内存,默认 1G
–driver-java-options
传给 driver 的额外的 Java 选项
–driver-library-path
传给 driver 的额外的库路径
–driver-class-path
传给 driver 的额外的类路径,用–jars 添加的jar包会自动包含在类路径里
–driver-cores
Driver 的核数,默认是1。在 yarn 或者 standalone 下使用
–executor-memory
每个 executor 的内存,默认是1G
–total-executor-cores
所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用
–num-executors
启动的 executor 数量。默认为2。在 yarn 下使用
–executor-core
每个 executor 的核数。在yarn或者standalone下使用
参数设置
当–master参数设置为Standalone,–deploy-mode参数设置为cluster时,如下选项可以设置:
–driver-cores NUM:driver使用的内核数,默认为1
当–master参数设置为Standalone或者Mesos,–deploy-mode参数设置为cluster时,如下选项可以设置:
–supervise:如果设置了该参数,driver失败是会重启
–kill SUBMISSION_ID:如果设置了该参数,则会杀死指定SUBMISSION_ID的driver进程
–status SUBMISSION_ID:如果设置了该参数,则请求返回指定SUBMISSION_ID的driver的状态
当–master参数设置为Standalone或者Mesos时,如下选项可以设置:
–total-executor-cores NUM:设置集群中所有工作节点上executor使用的内核总数
当–master参数设置为Standalone或者YARN时,如下选项可以设置:
–executor-cores NUM:每个executor使用的核数
当–master参数设置为YARN时,如下选项可以设置:
–driver-cores NUM :当–deploy-mode为cluster时,driver使用的内核数,默认为1
–queue QUEUE_NAME :将任务提交给哪个YARN队列,默认为YARN的默认队列
–num-executors NUM:设置启动的executor数量,默认为2
–archives ARCHIVES :被每个executor提取到工作目录的档案列表,用逗号隔开
三、模块依赖问题
-
Driver 负责把本地的资源分发给 Container
-
在 client 模式下,Driver 就找在 Client 端,可以把 client 端的资源分发,而 cluster 模式下,Driver 可在集群任一节点,该节点是没有资源的
-
如果是 普通依赖:
在 client 模式下,Driver 可能自动收集资源,分发,无需上传依赖;
在 cluster 模式下,Driver 无法收集资源,必须上传依赖;
- 如果是 复杂依赖:
在 client 模式 和 cluster 模式下,都需要通过 虚拟环境 上传依赖
-
在工业环境中,使用的多是 cluster 模式,cluster 模式必须上传依赖
-
在调试环节,多使用 client 模式,client 只需上传复杂依赖即可
Reference
[0] 官方文档spark-submit说明
[1] spark-submit提交任务及参数说明
[2] Pyspark On Yarn 的模块依赖问题
[3] Pyspark学习笔记(二)— spark-submit命令
[4] 搞懂spark-submit参数及应用程序提交(详细)
[5] PySpark on Yarn 的 Python 环境与包依赖解决方式
[6] Spark常用启动方式(三种)