当前位置:  开发笔记 > 编程语言 > 正文

在Amazon EMR上使用Spark时,如何分配驱动程序内存和执行程序内存的大小

如何解决《在AmazonEMR上使用Spark时,如何分配驱动程序内存和执行程序内存的大小》经验,为你挑选了1个好方法。

我使用AWS EMR 5.2实例m4.2x large,包含10个节点,用于使用Spark 2.0.2运行我的Spark应用程序.我用过的属性maximizeResourceAllocation=true.我在spark-defaults.conf中看到我在哪里看到以下属性:

spark.executor.instances         10
spark.executor.cores             16
spark.driver.memory              22342M
spark.executor.memory            21527M
spark.default.parallelism        320

yarn-site.xml中,我看到yarn.nodemanager.resource.memory-mb=24576(24GB).我只知道spark.executor.instances设置为10,因为我正在使用10个节点集群.但有人可以向我解释如何设置其他属性,如驱动程序内存和执行程序内存的计算方式?我也使用了属性.maximizeResourceAllocation=true这会影响内存吗?



1> FaigB..:

我建议使用Spark in Action这本书.简而言之,执行程序是运行驱动程序传递给它们的任务的容器.群集中的一个节点可以根据资源分配启动多个执行程序.CPU分配可以并行运行任务,因此最好为执行程序提供更多内核.因此,更多CPU核心意味着更多任务槽.执行程序的内存分配应该以合理的方式进行,该方式应该适合YARN容器内存.YARN容器内存> =执行程序内存+执行程序内存开销.

Spark为缓存数据存储和临时shuffle数据保留了该内存的一部分.使用参数spark.storage.memoryFraction(默认值为0.6)和spark.shuffle.memoryFraction(默认值为0.2)为这些设置堆.由于堆的这些部分可以在Spark测量和限制它们之前增长,因此必须设置两个额外的安全参数:( spark.storage.safetyFraction默认值为0.9)和spark.shuffle.safetyFraction(默认值为0.8).安全参数将内存分数降低指定的量.默认情况下用于存储的堆的实际部分是0.6×0.9(安全分数乘以存储内存分数),等于54%.类似地,用于shuffle数据的堆的部分是0.2×0.8(安全分数乘以shuffle memory fraction),等于16%.然后,您有30%的堆保留用于运行任务所需的其他Java对象和资源.但是,你应该只占20%.

驱动程序在执行者之间协调阶段和任务.执行程序的结果将返回给驱动程序,因此驱动程序的内存也应该被视为处理所有可以从所有执行程序收集的数据.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有