作业是否失败或服务器崩溃?如果你的作业因为节点上的 OutOfMemmory 而失败,你可以调整你的最大映射和化简器的数量,JVM 会为每个映射和化简器选择,这样就不会发生这种情况。mapred.child.java.opts(默认值为 200Xmx)通常必须根据数据节点的特定硬件进行增加。
http://allthingshadoop.com/2010/04/28/map-reduce-tips-tricks-your-first-real-cluster/
可以在 Namenode 上设置最大任务,也可以在可能具有不同硬件配置的数据节点上覆盖(并设置 final)。为映射器和化简器设置最大任务。要计算此值,它基于CPU(内核)和您拥有的RAM量以及您在mapred.child.java.opts中设置的JVM max(默认值为200)。Datanode和Tasktracker都设置为1GB,因此对于8GB的计算机,mapred.tasktracker.map.tasks.maximum可以设置为7,mapred.tasktracker.reduce.tasks.max设置为7,mapred.child.java.opts设置为-400Xmx(假设有8个内核)。请注意,如果您只有1个CPU和1个内核,那么这些任务最大值由您的CPU完成,那么现在是时候为数据节点获取新硬件或将掩码任务设置为1了。如果你有1个CPU和4个核心,那么将map设置为3并减少到3会很好(为守护程序节省1个核心)。
默认情况下,只有一个化简器,您需要将 mapred.reduce.tasks 配置为多个化简器。此值应介于每个节点的最大任务数乘以数据节点数的 0.95 到 1.75 倍之间。因此,如果您有3个数据节点,并且设置的最大任务为7,则在25和36之间配置它。
如果您的服务器因 OutOfMemory 问题而崩溃,那么这就是HADOOP_HEAPSIZE仅针对进程堆(而不是任务的执行)而出现的地方。
最后,如果你的作业花了那么长时间,你可以检查一下你是否还有另一个好的配置添加是mapred.compress.map.output。将此值设置为 true 应该(在压缩时间与传输时间之间取得平衡)会大大加快化简器复制速度,尤其是在处理大型数据集时。通常工作确实需要时间,但也有一些选项可以调整以帮助加快速度= 8^)