我使用aws emr和YARN-client在1个MasterNode,3个WorkerNode配置中运行Spark集群,MasterNode是客户端计算机。所有4个节点都有8GB内存和4个内核。鉴于硬件设置,我设置了以下内容:
spark.executor.memory = 5G
spark.executor.cores = 3
spark.yarn.executor.memoryOverhead = 600
使用该配置,Yarn的ResourceManager识别的预期Total Memory
是否为15GB?它显示18GB。我在运行Spark应用程序时只看到Yarn使用高达15GB的内容。是{15}来自spark.executor.memory * 3 nodes
?
我想假设YARN总记忆是由spark.executor.memory + spark.yarn.executor.memoryOverhead
计算的,但我无法在任何地方找到记录。找到确切数字的正确方法是什么?
我应该能够将spark.executor.memory
的值增加到6G
吗?我这样设置过去的错误。我需要设置其他配置吗?
编辑 - 所以它看起来像workerNodes' yarn.scheduler.maximum-allocation-mb
的值为6114
或6GB。这是EMR为实例类型设置的默认值。而且由于6GB * 3 = 18GB,这可能是有道理的。我想重新启动Yarn并将该值从6GB增加到7GB,但由于这是一个正在使用的集群,所以我想我的问题仍然存在。
答案 0 :(得分:1)
我想假设YARN总内存是由spark.executor.memory + spark.yarn.executor.memoryOverhead计算的,但是我无法在任何地方找到它。找到确切数字的正确方法是什么?
这是正确的,但倒退说。 YARN的总内存独立于您为Spark设置的任何配置。 onStart()
控制YARN可以访问的内存量,并且可以找到here。要将所有可用内存与Spark一起使用,您可以将yarn.scheduler.maximum-allocation-mb
+ spark.executor.memory
设置为等于spark.yarn.executor.memoryOverhead
。有关调整spark作业的详细信息,请参阅here;有关计算配置的信息,请参阅this spreadsheet。
我应该可以将spark.executor.memory的值增加到6G吧?
如果yarn.scheduler.maximum-allocation-mb为yarn.scheduler.maximum-allocation-mb
,则根据电子表格,spark.executor.memory
的上限为5502M
。手动计算,6114M
默认为.9 * 6114
spark.executor.memoryOverhead
,最少executorMemory * 0.10
(source)