2012-04-13 153 views
0

我正在運行Hadoop流式作業。此作業失敗,錯誤:超過Hadoop內存限制

"TaskTree [pid=13549,tipID=attempt_201202130706_121058_m_000000_0] is running beyond memory-limits. Current usage : 1667149824bytes. Limit : 1610612736bytes. Killing task." 

對於這份工作,mapred.job.map.memory.mb設置爲1536將此設置爲1536*2 = 3072幫助,但會導致1個map任務使用2個插槽,是不可取的。

當我在主機上運行這個作業時,我發現它使用1.07 GB的峯值內存,這是小於1536 MB的方式。我使用「top」和每1秒鐘使用"ps -o vsz=${pid}"的腳本驗證主機上作業的內存使用情況。

有人可以幫我理解/調試/修復這個問題。

+0

看起來像YARN,您使用的是Hadoop版本? – 2012-04-13 12:10:06

+0

$ hadoop版本 Hadoop 0.20.205.0.3.1112071329 ... – sunillp 2012-04-13 12:54:19

+0

sunillp,請從stackoverflow檢查此問題,[鏈接] http://stackoverflow.com/questions/8017500/specifying-memory-limits-with-hadoop – 2012-04-13 22:56:17

回答

0

這個問題可以用這個錯誤我在CDH版本here發現有關:

MapReduce task from Hive dynamic partitioning query is killed.

Problem: When using the Hive script to create and populate the partitioned table dynamically, the following error is reported in the TaskTracker log file:

TaskTree [pid=30275,tipID=attempt_201305041854_0350_m_000000_0] is running beyond memory-limits. Current usage : 1619562496bytes. Limit : 1610612736bytes. Killing task. 

你必須在mapred-site.xml中關閉內存設置:

mapred.cluster.map.memory.mb = -1 
mapred.cluster.reduce.memory.mb = -1 
mapred.job.map.memory.mb = -1 
mapred.job.reduce.memory.mb = -1 
mapred.cluster.max.map.memory.mb = -1 
mapred.cluster.max.reduce.memory.mb = -1