2011-01-27 22 views

回答

1

如果数据节点发生故障,该节点上运行的任务(假设你使用它的TaskTracker以及)将失败,这些失败的任务将被分配给其他的TaskTracker为重新执行。丢失在死datanode中的数据块将在其他数据节点中可用,因为跨群集复制数据。所以,即使数据节点出现故障,除非重新执行失败任务的时间非常短暂,否则不会有任何损失。所有这些都将由框架来处理。你的代码不用担心这个。

1

这主要取决于你的HDFS复制。如果它大于1,则作业将要求一个不在“已关闭”的服务器上的块。如果存在有效的复制,它将流式传输到作业,并且可以使用新块再次运行作业。

我的代码应该如何处理这种异常情况?

你不会面对任何异常,就像整个工作会失败一样。在这种情况下,你可以重新安排你的工作,并希望datanode恢复。

+0

嗯......我的复制是事实上3,我在测试过程中关闭了2个datanodes,但是我得到这个:信息hdfs.DFSClient:无法从任何节点获取块blk_7178702856169522439_8519:java.io.IOException:没有活节点包含当前块。 – Meg 2011-01-27 21:26:10