在Hive脚本中设置mapred.child.java.opts会导致MR作业被杀死'马上

时间:2014-04-04 18:37:50

标签: hadoop hive hiveql

由于OutOfMemory和GC开销限制超出错误,我一直有一些失败的工作。为了对抗前者,我尝试在蜂巢脚本的开头设置SET mapred.child.java.opts="-Xmx3G"; **。

基本上,每当我将此选项添加到脚本中时,已安排的MR作业(对于脚本中的第一个查询)都会被杀死'马上。

有关如何纠正此问题的任何想法?是否有任何其他参数需要与最大堆空间一起修补(例如io.sort.mb)?任何帮助都会最受欢迎

FWIW,我正在hive-0.7.0使用hadoop-0.20.2。我们群集中最大堆大小的默认设置是1200M。

TIA。

** - 尝试了其他一些替代方案(具有滑稽效果但结果没有明显变化):

  • SET mapred.child.java.opts="-Xmx3G";

  • SET mapred.child.java.opts="-server -Xmx3072M";

  • SET mapred.map.child.java.opts ="-server -Xmx3072M";

    SET mapred.reduce.child.java.opts ="-server -Xmx3072M";

  • SET mapred.child.java.opts="-Xmx2G";

更新1:它可能与设置堆大小无关。以任何方式修改mapred.child.java.opts都会导致相同的结果。例如,设置SET mapred.child.java.opts="-XX:+UseConcMarkSweepGC";具有相同的MR作业被立即杀死的结果。或者甚至在脚本中明确地将其设置为'群集默认值'导致这一点。

更新2:添加了grep个JobTracker日志here的粘贴框。

2 个答案:

答案 0 :(得分:13)

认为这最终会成为一件微不足道的事情,最终会发生这种情况。

如此设置mapred.child.java.opts

SET mapred.child.java.opts="-Xmx4G -XX:+UseConcMarkSweepGC";

是不可接受的。但这似乎很顺利:

SET mapred.child.java.opts=-Xmx4G -XX:+UseConcMarkSweepGC;(减去双引号)

叹息。有更好的调试选项/错误消息本来不错。

答案 1 :(得分:1)

另外两名警卫可以限制任务记忆的使用。两者都是为管理员设计的,以强制执行QoS,因此,如果您不是群集中的某个管理员,则可能无法更改它们。

第一个是ulimit,可以直接在节点OS中设置,也可以通过设置mapred.child.ulimit

第二个是一对群集范围的mapred.cluster.max.*.memory.mb属性,通过将作业设置mapred.job.map.memory.mbmapred.job.reduce.memory.mb与群集范围的限制进行比较来强制执行内存使用。