hadoop 點點滴滴(二)

來源:互聯網
上載者:User

標籤:blog   http   java   使用   io   strong   檔案   for   ar   

hadoop2.0 yarn 記憶體溢出問題解決

異常提示:

Container [pid=20170,containerID=container_1390877171119_0002_01_000005] is running beyond virtual memory limits. Current usage: 416.8 MB of 1 GB physical memory used; 2.7 GB of 2.1 GB virtual memory used. Killing container.
Dump of the process-tree for container_1390877171119_0002_01_000005 :
|- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
|- 20175 20170 20170 20170 (java) 939 42 2806788096 106404 /usr/local/jdk/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx2048M -Djava.io.tmpdir=/home/hadoop/hadoop-2.2.0/tmp/nm-local-dir/usercache/hadoop/appcache/application_1390877171119_0002/container_1390877171119_0002_01_000005/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/home/hadoop/hadoop-2.2.0/logs/userlogs/application_1390877171119_0002/container_1390877171119_0002_01_000005 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 10.100.2.9 34637 attempt_1390877171119_0002_m_000001_1 5
|- 20170 19734 20170 20170 (bash) 0 0 108646400 301 /bin/bash -c /usr/local/jdk/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx2048M -Djava.io.tmpdir=/home/hadoop/hadoop-2.2.0/tmp/nm-local-dir/usercache/hadoop/appcache/application_1390877171119_0002/container_1390877171119_0002_01_000005/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/home/hadoop/hadoop-2.2.0/logs/userlogs/application_1390877171119_0002/container_1390877171119_0002_01_000005 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 10.100.2.9 34637 attempt_1390877171119_0002_m_000001_1 5 1>/home/hadoop/hadoop-2.2.0/logs/userlogs/application_1390877171119_0002/container_1390877171119_0002_01_000005/stdout 2>/home/hadoop/hadoop-2.2.0/logs/userlogs/application_1390877171119_0002/container_1390877171119_0002_01_000005/stderr

Container killed on request. Exit code is 143

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

 

hadoop 點點滴滴(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.