一、作业提交

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 包。

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

更多大数据系列文章可以参见 GitHub 开源项目大数据入门指南

Spark 系列(五)—— Spark 运行模式与作业提交的更多相关文章

  1. Spark学习之路(五)—— Spark运行模式与作业提交

    一.作业提交 1.1 spark-submit Spark所有模式均使用spark-submit命令提交作业,其格式如下: ./bin/spark-submit \ --class <main- ...

  2. 大话Spark(5)-三图详述Spark Standalone/Client/Cluster运行模式

    之前在 大话Spark(2)里讲过Spark Yarn-Client的运行模式,有同学反馈与Cluster模式没有对比, 这里我重新整理了三张图分别看下Standalone,Yarn-Client 和 ...

  3. 2 Spark角色介绍及运行模式

    第2章 Spark角色介绍及运行模式 2.1 集群角色 从物理部署层面上来看,Spark主要分为两种类型的节点,Master节点和Worker节点:Master节点主要运行集群管理器的中心化部分,所承 ...

  4. 转:Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。

    原文来自于:http://www.ituring.com.cn/article/128439 Windows下的PHP开发环境搭建——PHP线程安全与非线程安全.Apache版本选择,及详解五种运行模 ...

  5. 入门大数据---Spark部署模式与作业提交

    一.作业提交 1.1 spark-submit Spark 所有模式均使用 spark-submit 命令提交作业,其格式如下: ./bin/spark-submit \ --class <ma ...

  6. Spark internal - 多样化的运行模式(上)

    Spark的运行模式多种多样,在单机上既可以以本地模式运行,也可以以伪分布式模式运行.而当以分布式的方式运行在Cluster集群中时,底层的资源调度可以使用Mesos 或者是Hadoop Yarn , ...

  7. 【Spark深入学习-11】Spark基本概念和运行模式

    ----本节内容------- 1.大数据基础 1.1大数据平台基本框架 1.2学习大数据的基础 1.3学习Spark的Hadoop基础 2.Hadoop生态基本介绍 2.1Hadoop生态组件介绍 ...

  8. Spark internal - 多样化的运行模式 (下)

    Spark的各种运行模式虽然启动方式,运行位置,调度手段有所不同,但它们所要完成的任务基本都是一致的,就是在合适的位置安全可靠的根据用户的配置和Job的需要管理和运行Task,这里粗略的列举一下在运行 ...

  9. Tomcat系列(8)——Tomcat运行模式连接数和线程池

    Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据:然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把产生的Reques ...

随机推荐

  1. 在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件

    DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一 ...

  2. c++简单桶排序

    c++简单桶排序 题目一样,还是排序 桶排序是排序算法里比较快的 代码 + 注释 #include <bits/stdc++.h> using namespace std; int mai ...

  3. Web自动化测试 三 ----- DOM对象和元素查找

    一.DOM对象 DOM(Document Object Model文档对象模型):将HTML的各种元素映射为JS可访问的对象.HTML文档中的所有内容都是节点,这些东西在HTML中我们称为元素. 整个 ...

  4. c++学习书籍推荐《C++程序设计语言(特别版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++程序设计语言(特别版•十周年中文纪念版)>编辑推荐:十周年纪念版,体味C++语言的精妙与魅力,享受与大师的心灵对话.1979年,Biarn ...

  5. 2019.6.21 NOIP2018提高组模拟题(二)

    1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到自己来到了魔法城堡,但一扇巨大的石门阻拦了他通向城堡内的路.正当他沮丧之际,突然发现门上有一处机关,机关上有一张很长的纸条.亮亮拿起 ...

  6. 教你如何上传项目到GitHub

    前言: 作为一个开发人员怎么可以不会使用GitHub呢,正好我也研究了一下如何往GitHub上传项目,这篇博客给初学者们观看,大佬请绕道. 新建GitHub仓库 没有注册过的先去GitHub官网进行注 ...

  7. vmware + opensuse windows如何远程登录到suse上

    vmware我还是比较偏向7.1.4版本,其他版本装在win7上似乎有点问题.windows平台下,使用vmware + opensuse的网络配置过程如下:      1. 装完vm后,会在本地连接 ...

  8. I/O:Writer

    Writer: Writer append(char c) :将指定字符添加到此 writer. Writer append(CharSequence csq) :将指定字符序列添加到此 writer ...

  9. 微信小程序生成随机数

    const charts = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K', ...

  10. python3.5学习笔记(第六章)

    本章内容: 正则表达式详解(re模块) 1.不使用正则表达式来查找文本的内容 要求从一个字符串中查找电话号码,并判断是否匹配制定的模式,如:555-555-5555.传统的查找方法如下: def is ...