Sparkspark-submit作业提交及参数设定

Posted 山顶夕景

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sparkspark-submit作业提交及参数设定相关的知识,希望对你有一定的参考价值。

note

文章目录

一、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提取到工作目录的档案列表,用逗号隔开

三、模块依赖问题

  1. Driver 负责把本地的资源分发给 Container

  2. 在 client 模式下,Driver 就找在 Client 端,可以把 client 端的资源分发,而 cluster 模式下,Driver 可在集群任一节点,该节点是没有资源的

  3. 如果是 普通依赖:

在 client 模式下,Driver 可能自动收集资源,分发,无需上传依赖;

在 cluster 模式下,Driver 无法收集资源,必须上传依赖;

  1. 如果是 复杂依赖:

在 client 模式 和 cluster 模式下,都需要通过 虚拟环境 上传依赖

  1. 在工业环境中,使用的多是 cluster 模式,cluster 模式必须上传依赖

  2. 在调试环节,多使用 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常用启动方式(三种)

以上是关于Sparkspark-submit作业提交及参数设定的主要内容,如果未能解决你的问题,请参考以下文章

C博客作业--指针

flink作业提交源码解析-命令行解析及运行

flink作业提交源码解析-命令行解析及运行

flink作业提交源码解析-命令行解析及运行

在线课程|作业提交|基于SSM+VUE的在线课程学习及作业提交系统的设计与实现

在线课程|作业提交|基于SSM+VUE的在线课程学习及作业提交系统的设计与实现