我正在运行一个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 个地图任务使用 2 个插槽,这是不可取的。
当我在主机上运行此作业时,我发现它使用 1.07 GB 的峰值内存,远小于 1536 MB。我使用"top"和每 1 秒使用 "ps -o vsz=${pid}"
的脚本验证了主机上作业的内存使用情况。
有人可以帮助我理解/调试/解决此问题吗?
这个问题可能与我在CDH版本上发现的这个错误有关:
来自Hive动态分区查询的MapReduce任务被杀死。
问题: 使用 Hive 脚本动态创建和填充分区表时,任务跟踪器日志文件中报告以下错误:
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