Spark 的 Yarn-cluster 和 Yarn-client 提交模式

  1. Yarn-client 模式
    1. 说明
    2. 流程
  2. Yarn-cluster 模式
    1. 说明
    2. 流程
  3. 区别
  4. 配置注意
  5. 查看日志
    1. 聚合日志(推荐,常用)
    2. web ui 方式
    3. 分散查看(通常不推荐)
  6. 启动

详细介绍 Spark on yarn 的两种不同运行模式的区别

Yarn-client 模式

说明

Yarn-client 模式用于测试, 因为 Driver 运行在本地客户端,负责调度 application, 会与 Yarn 集群产生大量的网络通信,从而导致网卡流量激增.
Yarn-client 模式的优点是可以在本地看到所有日志,方便调试

流程

image

  1. spark-submit 本地提交 application, 在本地启动 Driver 进程, 发送请求到 ResourceManager, 请求启动 ApplicationMaster
  2. 分配一个 container, 在某个 Nodemanager 上启动一个 ExecutorLanucher(相当于 ApplicationMaster)
  3. ExecutorLanucher 向 ResourceManager 请求 Container, 启动 Executor
  4. ResourceManager 分配一批 container 用于启动 Executor
  5. ExecutorLanucher 连接到分配过来的 container(Nodemanager, 相当于Worker而), 启动 Executor
  6. Executor 启动后向本地 Driver 反向注册

Yarn-cluster 模式

说明

Yarn-cluster 模式用于生产环境,因为 Driver 运行在 nodemanager 上, 不会有网卡流量激增的问题.
Yarn-cluster 模式缺点是调试不方便,不能直接查看日志,需要使用 yarn logs -applicationId xxx 命令查看

流程

image

  1. spark-submit 本地提交 application, 发送请求到 ResourceManager, 请求启动 ApplicationMaster
  2. 分配一个 container, 在某个 Nodemanager 上启动 ApplicationMaster(相当于 Driver)
  3. ApplicationMaster 向 ResourceManager 请求 Container, 启动 Executor
  4. ResourceManager 分配一批 container 用于启动 Executor
  5. ApplicationMaster 连接到分配过来的 container(Nodemanager, 相当于Worker而), 启动 Executor
  6. Executor 启动后向 ApplicationMaster 反向注册

区别

Yarn-client 模式的 Driver 进程运行在提交 application 的本地, 而 Yarn-cluster 模式的 Driver 运行在 ApplicationMaster

配置注意

配置 Spark Yarn 模式 必须在 spark-env 文件中, 配置 HADOOP_CONF_DIR 或 或YARN_CONF_DIR属性, spark 会根据这个路径找打 hadoop 的配置,从而管理 Hdfs 和 Yarn

名称 默认值 含义
spark.yarn.am.memory 512m client模式下,YARN Application Master使用的内存总量
spark.yarn.am.cores 1 client模式下,Application Master使用的cpu数量
spark.driver.cores 1 cluster模式下,driver使用的cpu core数量,driver与Application Master运行在一个进程中,所以也控制了Application Master的cpu数量
spark.yarn.am.waitTime 100s cluster模式下,Application Master要等待SparkContext初始化的时长; client模式下,application master等待driver来连接它的时长
spark.yarn.submit.file.replication hdfs副本数 作业写到hdfs上的文件的副本数量,比如工程jar,依赖jar,配置文件等,最小一定是1
spark.yarn.preserve.staging.files false 如果设置为true,那么在作业运行完之后,会避免工程jar等文件被删除掉
spark.yarn.scheduler.heartbeat.interval-ms 3000 application master向resourcemanager发送心跳的间隔,单位ms
spark.yarn.scheduler.initial-allocation.interval 200ms application master在有pending住的container分配需求时,立即向resourcemanager发送心跳的间隔
spark.yarn.max.executor.failures executor数量*2,最小3 整个作业判定为失败之前,executor最大的失败次数
spark.yarn.historyServer.address spark history server的地址
spark.yarn.dist.archives 每个executor都要获取并放入工作目录的archive
spark.yarn.dist.files 每个executor都要放入的工作目录的文件
spark.executor.instances 2 默认的executor数量
spark.yarn.executor.memoryOverhead executor内存10% 每个executor的堆外内存大小,用来存放诸如常量字符串等东西
spark.yarn.driver.memoryOverhead driver内存7% 同上
spark.yarn.am.memoryOverhead AM内存7% 同上
spark.yarn.am.port 随机 application master端口
spark.yarn.jar spark jar文件的位置
spark.yarn.access.namenodes spark作业能访问的hdfs namenode地址
spark.yarn.containerLauncherMaxThreads 25 application master能用来启动executor container的最大线程数量
spark.yarn.am.extraJavaOptions application master的jvm参数
spark.yarn.am.extraLibraryPath application master的额外库路径
spark.yarn.maxAppAttempts 提交spark作业最大的尝试次数
spark.yarn.submit.waitAppCompletion true cluster模式下,client是否等到作业运行完再退出

查看日志

在yarn模式下,spark作业运行相关的executor和ApplicationMaster都是运行在yarn的container中的, 所以日志也是分散的, 有下面几种方式查看日志

聚合日志(推荐,常用)

这种方式将散落在集群中各个机器上的日志,最后都聚合起来,container的日志会拷贝到hdfs上去,并从机器中删除,方便统一查看.
开启:
开启日志聚合的选项,即 yarn.log-aggregation-enable
查看:
使用 yarn logs -applicationId <app ID>命令查看日志

yarn logs命令,会打印出 application 对应的所有 container 的日志出来,因为日志是在hdfs上的,也可以通过hdfs的命令行来直接从hdfs中查看日志,日志在hdfs中的目录,可以通过查看yarn.nodemanager.remote-app-log-diryarn.nodemanager.remote-app-log-dir-suffix属性来获知

web ui 方式

需要启动History Server,让spark history server 和 mapreduce history server运行着,并且在yarn-site.xml文件中,配置yarn.log.server.url属性.

spark history server web ui中的log url,会重定向到mapreduce history server上去查看日志

分散查看(通常不推荐)

如果没有打开聚合日志选项,那么日志默认就是散落在各个机器上的本次磁盘目录中的,在YARN_APP_LOGS_DIR目录下,根据hadoop版本的不同,通常在/tmp/logs目录下,或者$HADOOP_HOME/logs/userlogs目录下
如果要查看某个container的日志,那么就得登录到那台机器上去,然后到指定的目录下去,找到那个日志文件,就才能查看.

启动

eg.

1
2
3
4
5
6
7
8
9
spark-submit  --master yarn-cluster \ 
--num-executors 1 \
--driver-memory 100m \
--executor-memory 100m \
--executor-cores 1 \
--queue hadoop队列 \
/usr/local/spark-2.2.1/examples/src/main/python/wordcount.py file:///home/zj/test.txt

--queue : 不同的大数据项目,共用同一个yarn集群,运行spark作业推荐一定要用--queue,指定不同的hadoop队列,做项目之间的队列隔离

文章标题:Spark 的 Yarn-cluster 和 Yarn-client 提交模式

文章字数:1.4k

本文作者:Waterandair

发布时间:2018-01-27, 09:24:06

最后更新:2019-12-28, 14:03:59

原始链接:https://waterandair.github.io/2018-01-27-spark-yarn-client-cluster.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

github