版权声明:欢迎转载,注明出处即可 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