【发布时间】:2017-10-20 23:11:14
【问题描述】:
spark-shell 开始使用:
spark-shell --master yarn --executor-memory 4G --num-executors 100
我希望 yarn 为 spark-shell 分配大约 400GB 内存,但是当我转到 RM UI 时,它显示“已使用内存”增加了大约 804GB。
我正在运行 HDP 2.5,在 yarn-site.xml 中将 yarn.scheduler.minimum-allocation-mb 设置为 4096。
对这是怎么发生的感到困惑。
原来是spark内存开销和yarn内存分配机制的问题,检查一下:
http://www.wdong.org/spark-on-yarn-where-have-all-the-memory-gone.html
规则 1. Yarn 总是将内存需求四舍五入为 yarn.scheduler.minimum-allocation-mb 的倍数,默认为 1024 或 1GB。这就是为什么司机要求的4G+384M在Yarn中显示为5G。参数 yarn.scheduler.minimum-allocation-mb 实际上是“minimum-allocation-unit-mb”。这可以通过将参数设置为质数(例如 97)轻松验证,并查看 Yarn allocate by multiple of the number。
规则 2。在向 Yarn 询问金额之前,Spark 会向 SPARK_EXECUTOR_MEMORY/SPARK_DRIVER_MEMORY 添加开销。
也就是说,在我的配置中,即使 spark-shell 也只要求 384MB 开销内存,这是 spark.yarn.executor.memoryOverhead 的默认值,yarn 会为它再分配 4GB。
【问题讨论】:
标签: hadoop apache-spark hadoop-yarn