Skip to content

Instantly share code, notes, and snippets.

@feitang0
Last active November 15, 2015 07:48
Show Gist options
  • Save feitang0/74e2fd319c6b45abf74b to your computer and use it in GitHub Desktop.
Save feitang0/74e2fd319c6b45abf74b to your computer and use it in GitHub Desktop.
Spark on Yarn

Spark on Yarn

yarn-client

yarn-client

yarn-cluster

yarn-cluster

内存分配

在使用spark-submit提交Spark作业时,可以通过参数

--num-executors 4 指定分配4个executors
--executor-memory 3g 指定分配3GB内存给每个executor

提交程序后会看到输出的日志显示

INFO yarn.Client: Will allocate AM container, with 896 MB memory including 384 MB overhead

AppMaster(AM)内存占用896MB,其中包含384MB的overhead memory.
另外在Yarn UI上看到Yarn为AM所在container分配的内存为1GB, executor所在的container为4GB.

在yarn-client模式下AM内存大小由spark.yarn.am.memory决定, 这个参数默认是512MB, 所以AM内存为896-384=512MB, 与参数一致, 其中384MB是额外申请的内存. 此内存的计算是max(512 * 0.1, 384) = 384MB. 0.1是系数. Yarn为container分配的最小内存由yarn.scheduler.minimum-allocation-mb参数决定,默认是1GB,但是Yarn分配给container的内存必须是最小内存的整数倍, 所以AM所在container内存为1GB.
executor实际拥有的内存为参数executor-memory乘上两个因子0.9 * 0.6(没看过源代码,这个值是从参考博客里看到的),所以executor内存为1024 * 3 * 0.9 * 0.6 = 1658.88MB, 实际在Spark UI上显示的是1589.8MB, 比理论值略小, 是正常情况. executor所在的container也要分配额外内存, 为max(1024 * 3 * 0.1, 384) = 384MB, 共3456MB, 但是container内存必须是最小分配内存的整数倍, 所以分配了4GB.

参考

1.Spark On YARN内存分配
2.Spark on yarn的内存分配问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment