簡體   English   中英

在RM UI中使用“Memory Used”,兩次請求spark-shell

[英]YARN “Memory Used” in RM UI twice as spark-shell requested

spark-shell開始使用:

spark-shell --master yarn --executor-memory 4G --num-executors 100

我期待紗線為spark-shell分配大約400GB的內存,但是當我轉到RM UI時,它顯示了大約804GB的“Memory Used”增量。

我正在運行HDP 2.5,其中yarn.scheduler.minimum-allocation-mb在yarn-site.xml中設置為4096。

對這是怎么回事感到困惑。


事實證明,火花記憶開銷和紗線記憶分配機制存在問題,請檢查:

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的要求在紗線中顯示為5G。 參數yarn.scheduler.minimum-allocation-mb實際上是“minimum-allocation-unit-mb”。 通過將參數設置為素數(例如97)可以輕松驗證這一點,並參見紗線分配數量的倍數。

規則2.Spark在向Yarn詢問金額之前為SPARK_EXECUTOR_MEMORY / SPARK_DRIVER_MEMORY增加了開銷。

也就是說,在我的配置中,即使spark-shell只需要384MB的開銷內存,這是spark.yarn.executor.memoryOverhead的默認值,紗線將為它分配另外4GB。

我的理解是--executor-memory為你提供了執行器可以使用的內存的上界,並成為執行者的-Xmx (JVM)。

在特定的時間點,它可以使用更少(這是好的)。

我將轉到YARN節點並執行jps -lm並查看執行程序JVM使用的屬性。

我在我們的環境中遇到了同樣的問題,其中紗線被設置為每個核心分配12 GB。 使用--executor-memory 12g提交作業的Spark用戶試圖利用分配的內存。 然而,這導致紗線為每個核心分配另外12 GB。 例如,200核心配置單元查詢將使用~2.5 TB的內存,但提交驅動程序內存和執行程序內存設置為12 GB的200核心火花作業將使用近5 TB的內存。

當應用程序請求的內存超過可用內存時,會分配另一個“單元”內存。 因此,我們的火花作業必須要求總共超過12 GB來觸發這一額外分配。 作為鏈接提及的帖子,spark的開銷內存設置為最大384 MB或.07 *執行程序內存。 因此,在我們的特定情況下,每個執行程序實際上請求12 +(12 * 0.07)= 12.84 GB。 由於這大於紗線分配的單位,每個核心然后接收第二個12 GB的內存單位。 解決方法是將驅動程序和執行程序內存減少到足夠低,以使內存和開銷總量小於12 GB。 在我們的例子設置--driver-memory--executor-memory11150m的伎倆(你也可以使用11g為簡單起見)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM