我有一个集群,网络不太好。有时候,长时间运行的工作会达到100%的映射并减少100%的映射,然后失败。
问题似乎是这样的: 在作业开始时,MapReduce将打开一个DataStreamer来写入.jhist文件。在整个工作过程中,(少量)DataNode偶尔会断开连接并重新连接。发生这种情况时,如果此DataNode当前位于.jhist写管道中,则将被标记为“坏”(对于.jhist管道),此后再也不会重新考虑。一个新的DataNode将在管道中替换它。
但是,如果最终每个DataNode都变得“坏”,则在作业结束时,MRAppMaster / JobHistoryEventHandler将尝试写入此中断的管道,并崩溃(JavaIOException,所有datanode都坏,依此类推)。事情从这里走下坡路,尽管完成了工作,但最终还是失败了。
这些.jhist文件对我来说并不重要,但是尽管进行了广泛的搜索,但我仍然找不到禁用它们的方法。这可能吗?或者,是否有办法让DataStreamer重试以前标记为“不良”的DataNode?如果上述两种方法均不可行,将不胜感激其他解决方法。
我正在使用Hadoop 3.0.3,将Hadoop升级到比该版本更大的选项,但是不能降级到3之前的版本。