1.1 GB of1 GB physical memory used

原文鏈接 : https://blog.csdn.net/dd390738878/article/details/9785679

問題描述:在跑一個mapreduce程序的過程中,提示內存溢出的錯誤,確定非程序影響。
百度了很多可能的問題產生原因,依次排除後,終於解決了。想把前人的經驗總結一下方便後人查閱。


異常提示:Container [pid=23708,containerID=container_1369623433359_0404_01_000151] is running beyond physical memory limits. Current usage: 3.2gb of 3.0gb physical memory used; 4.5gb of 6.3gb virtual memory used. Killing container.

1. io.file.buffer.size 的設置問題
    io.file.buffer.size 的值設置過大,map和reduce的任務可能會存在溢出。我這個值的設置是128k,其實不大,後來改成4k仍然出現異常證明不是這個問題. (io.file.buffer.size作爲hadoop緩衝區,用於 hadoop讀hdfs的文件和寫hdfs的文件,還有map的輸出都用到了這個緩衝區容量)


2. yarn的虛擬內存計算方式導致

這個問題應該是導致running beyond virtual memory limits.雖然沒有解決問題,但感覺不知道這個的人很容易被坑的
running beyond virtual memory limits. Current usage: 32.1mb of 1.0gb physical memory used; 6.2gb of 2.1gb virtual memory used. Killing container。
該錯誤是YARN的虛擬內存計算方式導致,上例中用戶程序申請的內存爲1Gb,YARN根據此值乘以一個比例(默認爲2.1)得出申請的虛擬內存的 值,當YARN計算的用戶程序所需虛擬內存值大於計算出來的值時,就會報出以上錯誤。調節比例值可以解決該問題。具體參數爲:yarn-site.xml 中的yarn.nodemanager.vmem-pmem-ratio

3.內存監控的問題

看到網上有人說,hadoop有個內存監控,可以設置當task,map,reduce or job 的累計使用的內存量大於limit的時候kill 程序。

第一,我增加了一倍reduce的數目,試着跑了一下,successed

第二,我保持之前的reduce的數目,在mapred-site.xml 配置文件中加入了兩段語句 同樣successed
<property>
<name>mapreduce.cluster.map.memory.mb</name>
<value>-1</value>
</property>
<property>
<name>mapreduce.cluster.reduce.memory.mb</name>
<value>-1</value>
</property>


第一個目的很明顯是分攤每個reduce的累計內存使用量
第二個的目的是關閉監控機制,只有值大於0的時候纔會啓動,當然默認值是-1,
只不過我設置了mapreduce.{map|reduce}.memory.mb。 看大神的博客裏有這麼一句話“They typically match the default values set for the options mapreduce.{map|reduce}.memory.mb。”
只是對於官網文檔上的此配置解釋的 vitual memory還有一點疑惑。

關於內存配置 見
http://blog.csdn.net/amaowolf/article/details/7188504
————————————————
版權聲明:本文爲CSDN博主「Lawrence費」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/dd390738878/article/details/9785679

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章