yarn物理記憶體虛擬記憶體問題

2021-10-23 19:19:49 字數 2270 閱讀 8443

問題描述:*** is running beyond physical memory limits. current usage: 5.8 gb of 5 gb physical memory used; 5.7 gb of 10.5 gb virtual memory used. killing container

5g為yarn.scheduler.minimum-allocation-mb的值或者它的整數倍,當yarn.scheduler.minimum-allocation-mb大於mapreduce.map.memory.mb的值則預設分配yarn.scheduler.minimum-allocation-mb,小於則取yarn.scheduler.minimum-allocation-mb的整數倍,當然最大不超過yarn.scheduler.maximum-allocation-mb 記憶體值,5.8g為mr任務map container實際占用的物理記憶體,10.5g為map container預設分配的記憶體值 乘以 yarn.nodemanager.vmem-pmem-ratio(預設2.1),5.7g為map container任務實際占用的虛擬記憶體

舉例解釋:

am引數mapreduce.map.memory.mb=1536mb,表示am要為map container申請1536mb資源,但rm實際分配的記憶體卻是2048mb,因為yarn.scheduler.mininum-allocation-mb=1024mb,這定義了rm最小要分配1024mb,1536mb超過了這個值,所以實際分配給am的值為2048mb(這涉及到了規整化因子,關於規整化因子,為了易於管理資源和排程資源,hadoop yarn內建了資源規整化演算法,它規定了最小可申請資源量、最大可申請資源量和資源規整化因子,如果應用程式申請的資源量小於最小可申請資源量,則yarn會將其大小改為最小可申請量,也就是說,應用程式獲得資源不會小於自己申請的資源,但也不一定相等;如果應用程式申請的資源量大於最大可申請資源量,則會丟擲異常,無法申請成功;規整化因子是用來規整化應用程式資源的,應用程式申請的資源如果不是該因子的整數倍,則將被修改為最小的整數倍對應的值,公式為ceil(a/b)*b,其中a是應用程式申請的資源,b為規整化因子。

yarn.scheduler.minimum-allocation-mb:最小可申請記憶體量,預設是1024

yarn.scheduler.minimum-allocation-vcores:最小可申請cpu數,預設是1

yarn.scheduler.maximum-allocation-mb:最大可申請記憶體量,預設是8096

yarn.scheduler.maximum-allocation-vcores:最大可申請cpu數,預設是4

對於規整化因子,不同排程器不同,具體如下:

fifo和capacity scheduler,規整化因子等於最小可申請資源量,不可單獨配置。

fair scheduler:規整化因子通過引數yarn.scheduler.increment-allocation-mb和yarn.scheduler.increment-allocation-vcores設定,預設是1024和1。

通過以上介紹可知,應用程式申請到資源量可能大於資源申請的資源量,比如yarn的最小可申請資源記憶體量為1024,規整因子是1024,如果乙個應用程式申請1500記憶體,則會得到2048記憶體,如果規整因子是512,則得到1536記憶體。)

物理記憶體:記憶體條

虛擬記憶體:利用磁碟空間虛擬劃出的一塊邏輯記憶體,用作虛擬記憶體的磁碟空間被稱為交換空間(swap space)。(為了滿足物理記憶體的不足而提出的策略)

linux會在物理記憶體不足時,使用交換分割槽的虛擬記憶體。核心會將暫時不用的記憶體塊資訊寫到交換空間,這樣以來,物理記憶體得到了釋放,這塊記憶體就可以用於其它目的,當需要用到原始的內容時,這些資訊會被重新從交換空間讀入物理記憶體。

這種錯誤在可能出現在物理記憶體也可能是因為虛擬記憶體不足造成的。

解決方案:

1、如果集群數量多,增加map或者reduce的個數,均衡一下。

2、增加 yarn.scheduler.minimum-allocation-mb的記憶體上限

3、關閉記憶體檢查機制(不建議)

物理記憶體:yarn.nodemanager.pmem-check-enabled的屬性值改為false

虛擬記憶體:yarn.nodemanager.vmem-check-enabled的屬性值改為false

4、增大mapreduce.map.memory.mb

5、增大 yarn.nodemanager.vmem-pmem-ratio的大小,增大對應的虛擬記憶體

記憶體管理 物理記憶體 虛擬記憶體

記憶體管理 物理記憶體 pc上有三條匯流排,分別是資料匯流排 位址匯流排和控制匯流排。32位的cpu的定址能力為4gb 2 32 個位元組。使用者最多 可以使用4gb的真實的物理記憶體。記憶體管理 虛擬記憶體 windows的所有程式 包括ring0層和ring3層的程式 可以操作的都是虛擬記憶體。...

物理記憶體和虛擬記憶體

1.物理記憶體和虛擬記憶體 直接從物理記憶體讀取資料比從硬碟讀寫資料要快得多,因此,我們希望所有的資料的讀寫在記憶體中完成,但是記憶體是有限的,這樣就引出了物理記憶體與虛擬記憶體的概念。物理記憶體是系統硬體提供的記憶體大小,是真正的記憶體。虛擬記憶體是為了滿足物理記憶體不足而提出的策略,利用磁碟空間...

虛擬記憶體和物理記憶體

虛擬記憶體 物理記憶體 物理記憶體,在應用中,物理上,真實的插在板子上的記憶體是多大就是多大了。而在cpu中的概念,物理記憶體就是cpu的位址線可以直接進行定址的記憶體空間大小。比如8086只有20根位址線,那麼它的定址空間就是1mb,我們就說8086能支援1mb的物理記憶體,及時我們安裝了128m...