您的位置:首页 > 其它

Spark On YARN部署模式下的内存分配情况

2017-08-02 11:30 323 查看
本文主要了解Spark On YARN部署模式下的内存分配情况,因为没有深入研究Spark的源代码,所以只能根据日志去看相关的源代码,从而了解“为什么会这样,为什么会那样”。


说明

按照Spark应用程序中的driver分布方式不同,Spark on YARN有两种模式: 
yarn-client
模式、
yarn-cluster
模式。

当在YARN上运行Spark作业,每个Spark executor作为一个YARN容器运行。Spark可以使得多个Tasks在同一个容器里面运行。

关于Spark On YARN相关的配置参数,请参考Spark配置参数。本文主要讨论内存分配情况,所以只需要关注以下几个内心相关的参数:
spark.driver.memory
:默认值512m
spark.executor.memory
:默认值512m
spark.yarn.am.memory
:默认值512m
spark.yarn.executor.memoryOverhead
:值为
executorMemory
* 0.07, with minimum of 384

spark.yarn.driver.memoryOverhead
:值为
driverMemory
* 0.07, with minimum of 384

spark.yarn.am.memoryOverhead
:值为
AM
memory * 0.07, with minimum of 384


注意:
--executor-memory/spark.executor.memory
 控制 executor
的堆的大小,但是 JVM 本身也会占用一定的堆空间,比如内部的 String 或者直接 byte buffer,
spark.yarn.XXX.memoryOverhead
属性决定向
YARN 请求的每个 executor 或dirver或am 的额外堆内存大小,默认值为 
max(384, 0.07 * spark.executor.memory
)
在 executor 执行的时候配置过大的 memory 经常会导致过长的GC延时,64G是推荐的一个 executor 内存大小的上限。
HDFS client 在大量并发线程时存在性能问题。大概的估计是每个 executor 中最多5个并行的 task 就可以占满写入带宽。

另外,因为任务是提交到YARN上运行的,所以YARN中有几个关键参数,参考YARN的内存和CPU配置
yarn.app.mapreduce.am.resource.mb
:AM能够申请的最大内存,默认值为1536MB
yarn.nodemanager.resource.memory-mb
:nodemanager能够申请的最大内存,默认值为8192MB
yarn.scheduler.minimum-allocation-mb
:调度时一个container能够申请的最小资源,默认值为1024MB
yarn.scheduler.maximum-allocation-mb
:调度时一个container能够申请的最大资源,默认值为8192MB
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: