我在运行的一些 Spark LDA 主题建模中遇到了各种问题(主要是看似随机间隔的解关联错误),我认为这主要与我的执行程序上的内存分配不足有关。这似乎与有问题的自动集群配置有关。我最近的尝试使用 n1-standard-8 机器(8 个内核,30GB RAM)作为主节点和工作节点(6 个工作节点,因此总共 48 个内核)。
但是当我看时,/etc/spark/conf/spark-defaults.conf
我看到了:
spark.master yarn-client
spark.eventLog.enabled true
spark.eventLog.dir hdfs://cluster-3-m/user/spark/eventlog
# Dynamic allocation on YARN
spark.dynamicAllocation.enabled true
spark.dynamicAllocation.minExecutors 1
spark.dynamicAllocation.initialExecutors 100000
spark.dynamicAllocation.maxExecutors 100000
spark.shuffle.service.enabled true
spark.scheduler.minRegisteredResourcesRatio 0.0
spark.yarn.historyServer.address cluster-3-m:18080
spark.history.fs.logDirectory hdfs://cluster-3-m/user/spark/eventlog
spark.executor.cores 4
spark.executor.memory 9310m
spark.yarn.executor.memoryOverhead 930
# Overkill
spark.yarn.am.memory 9310m
spark.yarn.am.memoryOverhead 930
spark.driver.memory 7556m
spark.driver.maxResultSize 3778m
spark.akka.frameSize 512
# Add ALPN for Bigtable
spark.driver.extraJavaOptions -Xbootclasspath/p:/usr/local/share/google/alpn/alpn-boot-8.1.3.v20150130.jar
spark.executor.extraJavaOptions -Xbootclasspath/p:/usr/local/share/google/alpn/alpn-boot-8.1.3.v20150130.jar
但是这些值没有多大意义。为什么只使用 4/8 执行器核心?只有 9.3 / 30GB RAM?我的印象是所有这些配置都应该自动处理,但即使我尝试手动调整也没有让我到任何地方。
例如,我尝试使用以下命令启动 shell:
spark-shell --conf spark.executor.cores=8 --conf spark.executor.memory=24g
但是后来这失败了
java.lang.IllegalArgumentException: Required executor memory (24576+930 MB) is above the max threshold (22528 MB) of this cluster! Please increase the value of 'yarn.scheduler.maximum-allocation-mb'.
我尝试更改 中的关联值/etc/hadoop/conf/yarn-site.xml
,但没有效果。即使我尝试不同的集群设置(例如使用具有 60+ GB RAM 的执行程序),我最终也会遇到同样的问题。由于某种原因,最大阈值保持在 22528MB。
我在这里做错了什么,还是这是谷歌自动配置的问题?