原文链接

Spark在 0.6.0版本后支持在YARN(hadoop NextGen)上运行,并且在后续版本中不断改进。

在YARN上启动Spark

首先,确认 HADOOP_CONF_DIR或YARN_CONF_DIR指向的包含了Hadoop集群的配置文件。这些配置用于操作HDFS和连接YARN资源管理器。在这个目录下的这些配置文件将被分发到YARN集群中,因此应用所使用的容器能够使用相同的配置。如果配置中的java系统参数或环境变量没有被YARN所管理,就必须设置在Spark应用的配置中(驱动、执行器、和运行在客户端模式下的应用Master)

有两种模式能够在YARN下启动Spark应用,YARN集群模式和YARN客户端模式。在Yarn集群方式,Spark驱动运行在,YARN管理的运行在集群上的应用主进程中,客户端程序在应用初始化后就结。在YARN何况模式下,驱动运行在客户端进程中,应用主进程只能使用在YARN中请求的资源。

不同于standalone和Mesos模式中通过 –master 参数指定master 地址。在YARN模式中,资源管理器地址在HADOOP配置中获取。所以, –master参数可选yarn-client或yarn-cluster。

下面的命令能够在YARN cluster下运行SPARK 应用:

./bin/spark-submit --class path.to.your.Class --master yarn-cluster [options] [app options]

例如:

$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \

--master yarn-cluster \

--num-executors 3 \

--driver-memory 4g \

--executor-memory 2g \

--executor-cores 1 \

--queue thequeue \

lib/spark-examples*.jar \

10

上面的命令启动了一个YARN端程序,调用默认的应用Master,SparkPi作为Master的子线程运行。客户端定期连向应用Master更新并在console中显示状态。当应用结束后客户端进程也会退出。在后面的“调试应用”小节,将介绍如何查看驱动器和执行器的日志。

同样可以在YARN客户端模式下运行Spark应用,只需要将“yarn-cluster”换成“yarn-client”

$ ./bin/spark-shell --master yarn-client

添加其他JAR包

在yarn-culster模式下,驱动器和客户端在不同的集群上运行,所以在保存在客户端上文件不能通过SparkContext.addJar加入到运行沙盒中。为了让SparkContext.addJar能够使用客户端上的这些文件,需要把他们通过–jar选项加入到启动命令中。

$ ./bin/spark-submit --class my.main.Class \

--master yarn-cluster \

--jars my-other-jar.jar,my-other-other-jar.jar

my-main-jar.jar

app_arg1 app_arg2

准备工作

在YARN上运行Spark需要一个支持YARN的Spark二进制包,这个包可以在Spark项目网站上下载。

配置

Spark在YARN上的大部分配置项和其他部署模式相同,可以在后面配置项一节获得更多关于此的信息,这些配置仅用于在YARN上运行Spark。

应用调试

用YARN术语来说,执行器、应用Master都在容器(container)内运行。在应用结束后YARN会采用2种方式处理容器日志。如果开启了日志归集(yarn.log-aggregation-enable),日志将被拷到HDFS上,本地文件将被删除。这些日志可以通过’yarn logs’命令在集群的任何节点查看。

yarn logs -applicationId

上面的命令会打印出应用所有容器的日志文件内容。当然也可以直接在hdfs查看容器日志。存入日志的目录通过yarn.nodemanager.remote-app-log-dir和yarn.nodemanager.remote-app-log-dir-suffix配置。同样,也可以在Spark web UI的执行器Tab页下查看相关日志。前提是需要在 yarn-site.xml中配置 yarn.log.server.url,并保证Spark历史服务器和MapReduce历史服务器正常运行。Spark历史服务器UI上的log连接会重定向到MapReduce历史服务器来显示归集的日志。

如果没有开启日志归集,日志会保存在各个机器的YARN_APP_LOGS_DIR下,根据Hadoop版本或安装的不同一般是/tmp/logs 或 $HADOOP_HOME/logs/userlogs。需要登录到各台机器上去查看日志,这些日志会按应用id和容器id的结构来分子目录保存。同样可以通过Spark Web Ui来查看日志,而不需要MapReduce历史服务器。

通过增加yarn.nodemanager.delete.debug-delay-sec,如36000,可以在容器启动的各个节点yarn.nodemanager.local-dirs目录保留的应用缓存中查看每个容器的启动环境。这个目录下保存了启动脚本、Jar包、启动是的环境变量等信息。这对调试,特别是Classpath问题很有用。注,这些设置需要集群管理员权限,并且要重启所有的节点管理器,所以在托管集群上很难完成。

有几种可选方式给应用Master和执行器配置定制化的log4j配置:

1.通过在上传应用的时候(spark-submit),在-file里增加log4j.properties文件

2.在执行器的spark.driver.extraJavaOptions,或在驱动器的spark.executor.extraJavaOptions 选项,增加-Dlog4j.configuration=;。注,如果使用文件,需要明确指定,并且需要在所有节点存在。

3. 更新$SPARK_CONF_DIR/log4j.properties文件,此配置会和其他配置一起自动上传。注:如果指定了多个选项,另外2个选项的优先级高于本配置。

如果采用第一个方式,需要注意的是,执行器和应用Master使用同一个log4j配置,当他们跑在同一个节点的时候会有问题(如,尝试写同一个日志文件)。

如果需要在YARN上显示、汇聚日志,需要通过在log4j.properties用spark.yarn.app.container.log.dir配置相对路径。例如,log4j.appender.file_appender.File=${spark.yarn.app.container.log.dir}/spark.log

对于streaming应用,配置configuring RollingFileAppender并把路径设置到YARN目录里,可以避免由于日志过大而硬盘空间不够的问题。同时这些log还可以用YARN日志工具访问。

配置项

名称

默认值

说明

spark.yarn.am.memory

512m

在终端模式下YARN应用Master使用的内存总量,和JVM配置的格式一样(如,512m、2g)在集群模式下,用spark.driver.memory设定

spark.driver.cores

1

在YARN集群模式下,驱动器使用的内核数。集群模式下,驱动器与YARN应用Master运行在同一个JVM中,所以这个参数还限定了应用Master使用的内核数。在终端摩梭下,用spark.yarn.am.cores设定应用Master使用的内核数

spark.yarn.am.cores

1

在终端模式下,YARN应用Master使用的内核数

spark.yarn.am.waitTime

100s

在YARN集群模式下,代表应用Master等待SparkContxt进行初始化的时间。在YARN终端模式下,代表应用Master等待驱动器连接的时间

spark.yarn.submit.file.replication

HDFS 默认副本数(一般是3)

应用上次文件到HDFS时使用的HDFS复制数量。包括Spark jar、应用Jar,或者其他任意分布式缓存文件或归档。

spark.yarn.preserve.staging.files

false

如果设置为true,在任务结束时保留中文件,Spark Jar,App Jar,分布式缓存文件等。

spark.yarn.scheduler.heartbeat.interval-ms

3000

Spark 应用Master与YARN资源管理器保持心跳的周期,单位为毫秒(ms)。上限是YARN失效周期(yarn.am.liveness-monitor.expiry-interval-ms)的一半

spark.yarn.scheduler.initial-allocation.interval

200ms

当有未处理的容器分配请求时,Spark应用master与YARN资源管理器间的心跳周期。不能大于spark.yarn.scheduler.heartbeat.interval-ms。如果未处理的容器分配请求持续存在,这个周期将会加倍,一直达到spark.yarn.scheduler.heartbeat.interval-ms。

spark.yarn.max.executor.failures

numExecutors * 2,至少3

当失败的执行器数大于spark.yarn.max.executor.failures,应用将被标记为失败

spark.yarn.historyServer.address

Spark 历史服务器地址(例如, host.com:18080),不需要包好http://。默认为空,历史服务器是可选的。当应用结束时,Spark资源管理器将应用的连接从资源管理器UI转换到Spark历史服务器UI。这个参数是可变的,可以在Spark运行期间调整。例如,如果历史服务器和YARN管理器运行在一个节点上,可以设置为`${hadoopconf-yarn.resourcemanager.hostname}:18080`.

spark.yarn.dist.archives

逗号分隔的列表,用于存放从执行器工作目录提取的归档文件

java spark yarn_《Spark官方文档》在YARN上运行Spark相关推荐

  1. Spark利用(idea+maven+scala)创建wordcount打包jar并在spark on yarn上运行——Spark的开发

    今天的你不付昨天的辛苦,今天的辛苦定会拥抱明日的幸福, 每一次的成长,都要给自己以鼓励,每一次的突破,都给自己以信心,万花丛中我不是最美,但我有我的自信 ------------送给一直努力的你 今天 ...

  2. spark官方文档_这些未在 Spark SQL 文档中说明的优化措施,你知道吗?

    本文来自上周(2020-11-17至2020-11-19)举办的 Data + AI Summit 2020 (原 Spark+AI Summit),主题为<Spark SQL Beyond O ...

  3. Spark官方文档——本地编写并运行scala程序

    快速开始 本文将介绍如何用scala.java.python编写一个spark单击模式的程序. 首先你只需要在一台机器上成功建造Spark:做法: 进入Spark的根目录,输入命令:$ sbt/sbt ...

  4. linkerd mysql_《Linkerd官方文档》在本地运行Linkerd

    本地运行 本指南将引导您完成本地下载和运行Linkerd所需的步骤. 为了在本地运行Linkerd,您必须安装Java 8.您可以运行以下命令来检查您的Java版本: $ java -version ...

  5. kal8linux密码,KAL1 LINUX 官方文档之arm上的ka1i---树莓派全盘加密

    以下文档尚不可用.在以下链接中关注状态:https://gitlab.com/ka1ilinux/documentation/ka1i-docs/issues/49 译者注:以下文章有操作有问题,因此 ...

  6. spark之4:基础指南(源自官方文档)

    spark之4:基础指南(源自官方文档) @(SPARK)[spark, 大数据] spark之4基础指南源自官方文档 一简介 二接入Spark 三初始化Spark 一使用Shell 四弹性分布式数据 ...

  7. 【甘道夫】Spark1.3.0 Running Spark on YARN 官方文档精华摘要

    引言 由于工作需要,即将拥抱Spark,曾经进行过相关知识的学习,现在计划详细读一遍最新版本Spark1.3的部分官方文档,一是复习,二是了解最新进展,三是为公司团队培训做储备. 欢迎转载,请注明出处 ...

  8. hadoop官方文档_hadoop体系简介

    hadoop核心 Apache Hadoop 项目有两个核心组件,被称为 Hadoop 分布式文件系统 (Hadoop Distributed File System, HDFS) 的文件存储,以及被 ...

  9. 《Log4j 2 官方文档》多余性(Additivity)

    如果我们希望输出com.foo.Bar的TRACE等级的日志,而不像影响其他日志的输出.简单的改变日志等级是不能达到我们想要的目的:但是修改也很简单,只要我们添加一个新的Logger定义就可以达到目标 ...

最新文章

  1. Linux服务器上监控网络带宽的18个常用命令
  2. 173. Binary Search Tree Iterator
  3. 安装Pod时提示ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod...
  4. 文巾解题 1035. 不相交的线
  5. 80端口攻击_内网端口转发工具的使用总结
  6. 发生TM锁争用的情况
  7. pythontab_PythonTab 中文网简介
  8. SpringBoot项目防止Sql注入
  9. 高数——八种求极限方法总结
  10. 基于Dlib库构建人脸识别数据集
  11. 国庆头像生成器小程序源码
  12. Docker可视化工具——Portainer全解
  13. Oracle的 IT 世界观
  14. 微软Visio流程图软件,Visio流程图制作工具下载安装教程(1)
  15. 职称有哪些意义?如何提升职称?
  16. Unity中的矩阵含义
  17. 小米手环NFC 模拟门禁卡 不买东西最简解决方案(100字)
  18. Java 如何查询当前项目Spring和SpringBoot的版本号
  19. LSTM的数据集准备
  20. 【数据结构】图的基本操作

热门文章

  1. 【三】Jmeter:测试片段
  2. linux generic什么意思_Linux下ps aux中进程状态为Ss,S+, Rs,Ds是什么意思?
  3. ios浏览器居然不支持yyyy-MM-dd HH:mm:ss格式
  4. Vue中如何实现代码高亮功能?
  5. SpringBoot maven项目如何打包进行发布?
  6. 普联技术java工程师_【普联技术(TP-LINK)工资】java开发工程师待遇-看准网
  7. 程序员合同日期不到想辞职_辞职报告怎么写最简单?写清楚理由和时间,签上姓名就OK了...
  8. 计算机博士一年看多少篇文献,博士生真的要一天看20篇文献吗?
  9. mysql sakila world_MySQL 安装示例数据库(employee、world、sakila、menagerie 等)
  10. poj3233(矩阵快速幂的和)