设为首页 加入收藏

TOP

Spark yarn模式下的资源分配配置
2019-05-12 01:26:48 】 浏览:122
Tags:Spark yarn 模式 资源分配 配置
版权声明:欢迎转载,注明出处即可 https://blog.csdn.net/yolohohohoho/article/details/90115131

前言

Spark on YARN模式下的主要资源为CPU内存
Spark资源分配配置在spark-defaults.conf中设置,其属性配置一般以 ***spark***开头,类似于spark.xx.xx。

Spark on Yarn中的两种部署模式

一般来说,YARN上启动Spark应用程序主要有两种模式:client模式和cluster模式

  • 在yarn-client模式下,驱动程序在客户端进程中运行,而Application Master 仅用于从YARN请求资源。
  • 在yarn-cluster模式下,Spark驱动程序Application Master 内运行,该进程由群集上的YARN管理,客户端可以在启动应用程序后退出。

关于Application Master (AM)的配置

yarn-client

属性名 默认值 描述
spark.yarn.am.memory 512m 在Client模式下用于YARN Application Master的内存量,格式与JVM内存字符串相同(例如512m,2g)。
在Cluster模式下,请改用spark.driver.memory。使用小写后缀,例如 k,m,g,t和p分别为kibi-,mebi-,gibi-,tebi-和pebibytes。
spark.yarn.am.cores 1 在Client模式下用于YARN Application Master的核心数。 在群集模式下,请改用spark.driver.cores。
spark.yarn.am.memoryOverhead AM memory * 0.10, 最少为384 在Client模式下使用,与spark.driver.memoryOverhead相同

yarn-cluster

而在yarn-cluster模式下, Spark驱动程序位于YARN AM内部。 下面列出的与驱动程序相关的配置也控制AM的资源分配。

属性名 默认值 描述
spark.driver.memory
(--driver-memory)
512m 用于driver进程的内存量,即SparkContext初始化的内存量,格式与JVM内存字符串相同,格式单位为后缀(“k”,“m”,“g”或“t”)(例如512m,2G)。 注意:在客户端模式下,不能直接在应用程序中通过SparkConf设置此配置,因为驱动程序JVM已在此时启动。 相反,请通过--driver-memory命令行选项或默认属性文件中设置此项。
spark.driver.cores
(--driver-cores)
1 driver进程的核心数,在Cluster模式下使用
spark.driver.memoryOverhead AM memory * 0.10, 最少为384 除非另有说明,否则在Cluster模式下为每个driver分配的堆外内存量(MiB)。 这是一个内存,可以解决诸如VM开销,以及其他本地开销等问题。它随着容器大小(通常为6-10%)而增长。 YARN和Kubernetes目前支持此选项。

关于Spark执行程序的容器

对于Spark执行器资源,yarn-client和yarn-cluster模式使用相同的配置:

属性名 默认值 描述
spark.executor.instances
(--num-executor)
2 静态分配的executor数。 使用spark.dynamicAllocation.enabled时,初始执行程序集至少含有该数量的executor数
spark.executor.memory
(--executor-memory)
1g 每个executor进程使用的内存量,格式与具有大小单位后缀(“k”,“m”,“g”或“t”)的JVM内存字符串相同(例如512m,2g)。
spark.executor.cores
(--executor-cores)
1 每个executor使用的核心数。
spark.executor.memoryOverhead executorMemory * 0.10, 最小为384 除非另有说明,否则每个executor要分配的堆外内存量(MiB)。 这是一个内存,可以解决诸如VM开销,以及其他本机开销等问题。这往往会随着执行程序的大小而增加(通常为6-10%)。 YARN和Kubernetes目前支持此选项。

如果每个执行程序只有一个核,那么一个执行程序只能在任何时间运行一个任务。 在使用broadcast join的情况下,如果我们增加每个执行程序的核心数,则可以使在同一执行程序中的多个正在运行的任务内存共享。

请注意,如果通过将spark.dynamicAllocation.enabled设置为true来启用动态资源分配,则Spark可以根据工作负载上下调整使用此应用程序注册的执行程序数。 在这种情况下,不需要手动指定spark.executor.instances。

关键要点

  • 在 yarn-cluster 模式控制YARN应用程序主资源用与Spark驱动程序资源相关的配置控制。
  • 在计算executor的内存时,请注意overhead off-heap memory为max (10%, 384m) 。
  • 每个executor的CPU核心数控制每个executor的并发任务数。

参考资料

Spark Configuration
Resource Allocation Configuration for Spark on YARN

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇        .. 下一篇        ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目