在Hive脚本中设置mapred.child.java.opts会导致MR作业立即被"杀死"

dec*_*tle 3 hadoop hive hiveql

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

基本上,每当我将此选项添加到脚本时,计划的MR作业(对于脚本中的第一个查询)都会立即被"杀死".

有关如何纠正这一点的任何想法?是否有任何其他参数需要与最大堆空间一起修补(例如io.sort.mb)?任何帮助将非常感激.

FWIW,我使用hive-0.7.0hadoop-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工作被立即杀死的结果.或者甚至在脚本中明确地将其设置为'cluster default'会导致这种情况.

更新2:在此处添加了一个grepJobTracker日志的pastebin .

dec*_*tle 13

认为这最终将成为一件微不足道的事情,最终会成为琐事.

mapred.child.java.opts这样设定:

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

是不可接受的.但这看起来很好:

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

叹了口气.有更好的调试选项/错误消息本来不错.