Hadoop 在配置单元脚本中设置mapred.child.java.opts将导致MR作业获得';死亡';马上
由于OutOfMemory和超出GC开销限制的错误,我一直有一些工作失败。为了对抗前者,我尝试设置Hadoop 在配置单元脚本中设置mapred.child.java.opts将导致MR作业获得';死亡';马上,hadoop,hive,hiveql,Hadoop,Hive,Hiveql,由于OutOfMemory和超出GC开销限制的错误,我一直有一些工作失败。为了对抗前者,我尝试设置SET mapred.child.java.opts=“-Xmx3G”在配置单元脚本**的开头 基本上,每当我将此选项添加到脚本中时,调度的MR作业(对于脚本中的几个查询中的第一个查询)都会立即“终止” 有没有关于如何纠正这种情况的想法?是否有任何其他参数需要与最大堆空间一起修改(例如,io.sort.mb)?非常感谢您的任何帮助 FWIW,我正在使用hive-0.7.0和hadoop-0.20.2
SET mapred.child.java.opts=“-Xmx3G”代码>在配置单元脚本**的开头
基本上,每当我将此选项添加到脚本中时,调度的MR作业(对于脚本中的几个查询中的第一个查询)都会立即“终止”
有没有关于如何纠正这种情况的想法?是否有任何其他参数需要与最大堆空间一起修改(例如,io.sort.mb
)?非常感谢您的任何帮助
FWIW,我正在使用hive-0.7.0
和hadoop-0.20.2
。集群中最大堆大小的默认设置是1200M
蒂亚
**-尝试过的其他一些替代方案(具有滑稽效果,但结果没有明显变化):
SET mapred.child.java.opts=“-Xmx3G”代码>
SET mapred.child.java.opts=“-server-Xmx3072M”代码>
设置mapred.map.child.java.opts=“-server-Xmx3072M”代码>
设置mapred.reduce.child.java.opts=“-server-Xmx3072M”代码>
SET mapred.child.java.opts=“-Xmx2G”代码>
更新1:这可能与设置堆大小无关。以任何方式修补mapred.child.java.opts都会导致相同的结果。例如,将其设置为,SET mapred.child.java.opts=“-XX:+UseConMarkSweepGC”代码>的结果与乔布斯先生马上被杀是一样的。甚至在脚本中将其显式设置为“集群默认值”也会导致这种情况
更新2:添加了JobTracker日志的grep
粘贴箱。另外两个保护可以限制任务内存的使用。两者都是为管理员设计的,用于强制QoS,因此如果您不是集群上的管理员之一,则可能无法更改它们
第一个是ulimit,它可以直接在节点操作系统中设置,也可以通过设置
第二个是一对集群范围的属性,通过比较作业设置mapred.job.map.memory.mb
和mapred.job.reduce.memory.mb
与集群范围的限制来强制执行内存使用。认为这最终将是一件琐碎/空洞的事情
设置mapred.child.java.opts从而:
SET mapred.child.java.opts=“-Xmx4G-XX:+UseConcMarkSweepGC”代码>
这是不能接受的。但这似乎很顺利:
SET mapred.child.java.opts=-Xmx4G-XX:+UseConcMarkSweepGC代码>(减去双引号)
唉。拥有更好的调试选项/错误消息会很好。我开始认为这与堆大小设置没有任何关系。以任何方式修补mapred.child.java.opts都会导致同样的结果。例如,将其设置为,SET mapred.child.java.opts=“-XX:+UseConMarkSweepGC”代码>的结果与乔布斯先生马上被杀是一样的。或者甚至在脚本中将其显式设置为“集群默认值”都会导致这种情况。嗯,您能够访问作业跟踪器日志吗?这里可能有更多的失败细节,我一直在努力寻找。我看到的唯一线索是试图安排数据本地的任务。我没有看到任何任务跟踪器日志,因为:a)作业跟踪器日志似乎只报告某些节点有“拆分”。但是,它不报告计划任何任务。b) 检查所有TT节点(被列为具有拆分)上的“尝试”日志不会产生任何结果。我感觉有一些蜂巢巫术在进行——甚至在查询执行开始之前,特别是因为作业被“杀死”,而不一定是“失败”。但是,我在hive.log
中没有看到任何内容。添加了JobTracker日志的grep
粘贴箱。看起来只是在设置选项值时使用了双引号导致了问题。唉。我补充了答案中的细节。谢谢你的帮助,顺便说一句。非常感谢。