Spark部署模式与任务提交

一、作业提交

1.1 spark-submit

Spark 所有模式均使用 spark-submit 命令提交作业,其格式如下:

./bin/spark-submit \--class <main-class> \        # 应用程序主入口类--master <master-url> \       # 集群的 Master Url--deploy-mode <deploy-mode> \ # 部署模式--conf <key>=<value> \        # 可选配置       ... # other options    <application-jar> \           # Jar 包路径 [application-arguments]       #传递给主入口类的参数  

需要注意的是:在集群环境下,application-jar 必须能被集群中所有节点都能访问,可以是 HDFS 上的路径;也可以是本地文件系统路径,如果是本地文件系统路径,则要求集群中每一个机器节点上的相同路径都存在该 Jar 包。

其他详细参数:

num-executors:该作业总共需要多少executor进程执行

– 建议:每个作业运行一般设置50~100个左右较合适

executor-memory:设置每个executor进程的内存, num-executors* executor-

memory代表作业申请的总内存量(尽量不要超过最大总内存的1/3~1/2)

– 建议:设置4G~8G较合适

executor-cores:每个executor进程的CPU Core数量,该参数决定每个

executor进程并行执行task线程的能力, num-executors* executor-cores代表

作业申请总CPU core数(不要超过总CPU Core的1/3~1/2 )

– 建议:设置2~4个较合适

spark.storage.memoryFraction:设置RDD持久化数据在executor内存中能占的比例,默认0.6,即默认executor 60%的内存可以保存持久化RDD数据
driver-memory:

– 建议:通常不用设置,一般1G就够了,若出现使用collect算子将RDD数据全部拉取到Driver上处理,就必须确保该值足够大,否则OOM内存溢出

• spark.default.parallelism:并行度,每个stage的默认task数量

– 建议:设置500~1000较合适,默认一个HDFS的block对应一个task,Spark默认值偏少,这样导致不能充分利用资源

– 建议:若有较多的持久化操作,可以设置高些,超出内存的会频繁gc导致运行缓慢

• spark.shuffle.memoryFraction:聚合操作占executor内存的比例,默认0.2

– 建议:若持久化操作较少,但shuffle较多时,可降低持久化内存占比,提高shuffle操作内存占比

1.2 deploy-mode

deploy-mode 有 clusterclient 两个可选参数,默认为 client。这里以 Spark On Yarn 模式对两者进行说明 :

  • 在 cluster 模式下,Spark Drvier 在应用程序的 Master 进程内运行,该进程由群集上的 YARN 管理,提交作业的客户端可以在启动应用程序后关闭;

  • 在 client 模式下,Spark Drvier 在提交作业的客户端进程中运行,Master 进程仅用于从 YARN 请求资源。

1.3 master-url

master-url 的所有可选参数如下表所示:

Master URL Meaning
local 使用一个线程本地运行 Spark
local[K] 使用 K 个 worker 线程本地运行 Spark
local[K,F] 使用 K 个 worker 线程本地运行 , 第二个参数为 Task 的失败重试次数
local[*] 使用与 CPU 核心数一样的线程数在本地运行 Spark
local[*,F] 使用与 CPU 核心数一样的线程数在本地运行 Spark 第二个参数为 Task 的失败重试次数
spark://HOST:PORT 连接至指定的 standalone 集群的 master 节点。端口号默认是 7077。
spark://HOST1:PORT1,HOST2:PORT2 如果 standalone 集群采用 Zookeeper 实现高可用,则必须包含由 zookeeper 设置的所有 master 主机地址。
mesos://HOST:PORT 连接至给定的 Mesos 集群。端口默认是 5050。对于使用了 ZooKeeper 的 Mesos cluster 来说,使用 mesos://zk://... 来指定地址,使用 --deploy-mode cluster 模式来提交。
yarn 连接至一个 YARN 集群,集群由配置的 HADOOP_CONF_DIR 或者 YARN_CONF_DIR 来决定。使用 --deploy-mode 参数来配置 clientcluster 模式。

下面主要介绍三种常用部署模式及对应的作业提交方式。

二、Local模式

Local 模式下提交作业最为简单,不需要进行任何配置,提交命令如下:

# 本地模式提交应用
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100   # 传给 SparkPi 的参数

spark-examples_2.11-2.4.0.jar 是 Spark 提供的测试用例包,SparkPi 用于计算 Pi 值,执行结果如下:

三、Standalone模式

Standalone 是 Spark 提供的一种内置的集群模式,采用内置的资源管理器进行管理。下面按照如图所示演示 1 个 Mater 和 2 个 Worker 节点的集群配置,这里使用两台主机进行演示:

  • hadoop001: 由于只有两台主机,所以 hadoop001 既是 Master 节点,也是 Worker 节点;

  • hadoop002 : Worker 节点。

3.1 环境配置

首先需要保证 Spark 已经解压在两台主机的相同路径上。然后进入 hadoop001 的 ${SPARK_HOME}/conf/ 目录下,拷贝配置样本并进行相关配置:

# cp spark-env.sh.template spark-env.sh

spark-env.sh 中配置 JDK 的目录,完成后将该配置使用 scp 命令分发到 hadoop002 上:

# JDK安装位置
JAVA_HOME=/usr/java/jdk1.8.0_201

3.2 集群配置

${SPARK_HOME}/conf/ 目录下,拷贝集群配置样本并进行相关配置:

# cp slaves.template slaves

指定所有 Worker 节点的主机名:

# A Spark Worker will be started on each of the machines listed below.
hadoop001
hadoop002

这里需要注意以下三点:

  • 主机名与 IP 地址的映射必须在 /etc/hosts 文件中已经配置,否则就直接使用 IP 地址;

  • 每个主机名必须独占一行;

  • Spark 的 Master 主机是通过 SSH 访问所有的 Worker 节点,所以需要预先配置免密登录。

3.3 启动

使用 start-all.sh 代表启动 Master 和所有 Worker 服务。

./sbin/start-master.sh 

访问 8080 端口,查看 Spark 的 Web-UI 界面,,此时应该显示有两个有效的工作节点:

3.4 提交作

# 以client模式提交到standalone集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop001:7077 \
--executor-memory 2G \
--total-executor-cores 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100
​
# 以cluster模式提交到standalone集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--deploy-mode cluster \
--supervise \  # 配置此参数代表开启监督,如果主应用程序异常退出,则自动重启 Driver
--executor-memory 2G \
--total-executor-cores 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100

3.5 可选配置

在虚拟机上提交作业时经常出现一个的问题是作业无法申请到足够的资源:

Initial job has not accepted any resources;
check your cluster UI to ensure that workers are registered and have sufficient resources

这时候可以查看 Web UI,我这里是内存空间不足:提交命令中要求作业的 executor-memory 是 2G,但是实际的工作节点的 Memory 只有 1G,这时候你可以修改 --executor-memory,也可以修改 Woker 的 Memory,其默认值为主机所有可用内存值减去 1G。

关于 Master 和 Woker 节点的所有可选配置如下,可以在 spark-env.sh 中进行对应的配置:

Environment Variable(环境变量) Meaning(含义)
SPARK_MASTER_HOST master 节点地址
SPARK_MASTER_PORT master 节点地址端口(默认:7077)
SPARK_MASTER_WEBUI_PORT master 的 web UI 的端口(默认:8080)
SPARK_MASTER_OPTS 仅用于 master 的配置属性,格式是 "-Dx=y"(默认:none),所有属性可以参考官方文档:spark-standalone-mode
SPARK_LOCAL_DIRS spark 的临时存储的目录,用于暂存 map 的输出和持久化存储 RDDs。多个目录用逗号分隔
SPARK_WORKER_CORES spark worker 节点可以使用 CPU Cores 的数量。(默认:全部可用)
SPARK_WORKER_MEMORY spark worker 节点可以使用的内存数量(默认:全部的内存减去 1GB);
SPARK_WORKER_PORT spark worker 节点的端口(默认: random(随机))
SPARK_WORKER_WEBUI_PORT worker 的 web UI 的 Port(端口)(默认:8081)
SPARK_WORKER_DIR worker 运行应用程序的目录,这个目录中包含日志和暂存空间(default:SPARK_HOME/work)
SPARK_WORKER_OPTS 仅用于 worker 的配置属性,格式是 "-Dx=y"(默认:none)。所有属性可以参考官方文档:spark-standalone-mode
SPARK_DAEMON_MEMORY 分配给 spark master 和 worker 守护进程的内存。(默认: 1G)
SPARK_DAEMON_JAVA_OPTS spark master 和 worker 守护进程的 JVM 选项,格式是 "-Dx=y"(默认:none)
SPARK_PUBLIC_DNS spark master 和 worker 的公开 DNS 名称。(默认:none)

三、Spark on Yarn模式

Spark 支持将作业提交到 Yarn 上运行,此时不需要启动 Master 节点,也不需要启动 Worker 节点。

3.1 配置

spark-env.sh 中配置 hadoop 的配置目录的位置,可以使用 YARN_CONF_DIRHADOOP_CONF_DIR 进行指定:

YARN_CONF_DIR=/usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop
# JDK安装位置
JAVA_HOME=/usr/java/jdk1.8.0_201

3.2 启动

必须要保证 Hadoop 已经启动,这里包括 YARN 和 HDFS 都需要启动,因为在计算过程中 Spark 会使用 HDFS 存储临时文件,如果 HDFS 没有启动,则会抛出异常。

# start-yarn.sh
# start-dfs.sh

3.3 提交应用

#  以client模式提交到yarn集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--executor-memory 2G \
--num-executors 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100
​
#  以cluster模式提交到yarn集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--executor-memory 2G \
--num-executors 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100

Spark部署模式、任务提交相关推荐

  1. 【大数据Spark系列】Spark部署模式与作业提交

    文章目录 Spark部署模式与作业提交 一.作业提交 1.1 spark-submit 1.2 deploy-mode 1.3 master-url 二.Local模式 三.Standalone模式 ...

  2. 编写一个脚本判断某个用户是否处在活动模式_大数据技术之Spark内核解析(二)Spark 部署模式...

    Spark支持3种集群管理器(Cluster Manager),分别为: 1. Standalone:独立模式,Spark原生的简单集群管理器,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他 ...

  3. Spark内核解析之二:Spark 部署模式

    前言 Spark支持3种集群管理器(Cluster Manager),分别为: Standalone:独立模式,Spark原生的简单集群管理器,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他 ...

  4. Spark部署模式入门

    部署模式概述 Spark支持的主要的三种分布式部署方式分别是standalone.spark on mesos和 spark on YARN. standalone模式 即独立模式,自带完整的服务,可 ...

  5. spark任务shell运行_Spark原理与实战(七)部署模式与运行机制

    导读:Spark的运行模式指的是Spark应用程序以怎样的方式运行,单节本地点运行还是多节点集群运行,自己进行资源调度管理还是依靠别人进行调度管理.Spark提供了多种多样,灵活多变的部署模式. 作者 ...

  6. spark任务shell运行_Spark原理与实战之部署模式与运行机制

    前言: Spark的运行模式指的是Spark应用程序以怎样的方式运行,单节本地点运行还是多节点集群运行,自己进行资源调度管理还是依靠别人进行调度管理.Spark提供了多种多样,灵活多变的部署模式. 一 ...

  7. 一篇文章读懂:Spark运行模式

    Spark性能调优与原理分析 01.Spark运行模式 运行Spark的应用程序,其实仅仅需要两种角色,Driver和Executor.Driver负责将用户的应用程序划分为多个Job,分成多个Tas ...

  8. 本地提交spark_spark快速入门(三)-------spark部署及运行模式

    spark支持多种部署方案,包括spark自带的standalone资源调度模式(StandAlone):运行在hadoop的yarn资源调度框架中(SparkOnYARN):local本地模式:可以 ...

  9. Spark 部署 Standalone 模式

    Spark 部署 Standalone 模式 解压缩文件 修改配置文件 启动集群 Web UI 界面 提交应用 提交参数说明 配置历史服务 配置日志存储路径 添加日志配置 重启动 Hadoop 集群 ...

最新文章

  1. 让指针指向初始位置c语言,初始C语言中的指针(翁凯男神MOOC)
  2. 文章内容排版对网站优化有哪些影响?
  3. Springboot中使用jpa
  4. 傅里叶变换在图像处理中的作用
  5. android弹出窗口的实现(PopupWindow)
  6. PHP的魔术常量魔术方法超全局变量
  7. 11-对象的常用方法
  8. 简述MVC思想与PHP如何实现MVC
  9. 7-37 整数分解为若干项之和 (20 分)(dfs)
  10. SpringBoot 精通系列-SpringBoot如何操作Memcache
  11. Android底部日期控件,Android开发中实现IOS风格底部选择器(支持时间 日期 自定义)...
  12. 密码字典生成工具汇总
  13. UG1969软件详细安装教程
  14. VS 201x C++ 编译错误解决方法集
  15. html怎么改默认浏览器,怎样设置默认浏览器?3种更改默认浏览器方法介绍
  16. @GuardedBy注解
  17. 路由器重温——BGP路由-1
  18. 金融风控评分卡建模全流程!
  19. 香农编码的C++实现及求平均码长和编码效率
  20. 深度学习-目标检测YOLOV3 YOLOv4原理详解

热门文章

  1. 在Microsoft-IIS/10.0上面部署mvc站点的时候,出现404的错误
  2. flex自定义preloader预加载进度条
  3. Android用户界面开发:控件集合
  4. 【ISL-2】什么是统计学习
  5. 引入Hub再生的最短帧长及主机之间距离的最大值计算
  6. 并查集算法学习(转)
  7. Windows设置共享文件夹,ubuntu访问
  8. python读取XML中bndbox和object name的方法
  9. ubuntu,win10 释放IP,重新获取IP
  10. C#并行和多线程编程