我正在阅读有关Hadoop及其容错能力的文章。我阅读了HDFS,了解了如何处理主节点和从节点的故障。然而,我找不到任何提到mapreduce如何执行容错的文档。特别是,当包含作业跟踪器的主节点或任何从节点出现故障时,会发生什么情况?
如果有人可以给我指出一些链接和参考资料,详细解释这一点。
MapReduce层容错取决于hadoop版本。对于hadoop.0.21之前的版本,没有检查点,JobTracker失败会导致数据丢失。
然而,从hadoop.0.21开始的版本,添加了检查点,JobTracker在文件中记录其进度。当JobTracker启动时,它会查找这样的数据,以便它可以从停止的地方重新开始工作。
容错在HADOOP
如果JobTracker在指定的时间内没有收到来自TaskTracker的任何心跳时间(默认设置为10分钟),JobTracker理解与之关联的workerTaskTracker失败了。当这种情况发生时,JobTracker需要重新调度所有挂起和正在进行的任务转移到另一个TaskTracker,因为中间数据属于失败的任务跟踪器可能不再可用。
所有完成的地图任务也需要如果属于未完成的作业,则重新调度,因为驻留在中间的结果失败了TaskTracker文件系统可能无法被reduce任务访问。
TaskTracker也可以被列入黑名单。在这种情况下,列入黑名单的TaskTracker仍然存在与JobTracker通信,但没有将任务分配给相应的worker。当一个给定属于特定作业的任务数量(默认情况下,此数量设置为4)TaskTracker失败,系统认为发生故障。
TaskTracker发送给JobTracker的心跳中的一些相关信息是:●TaskTrackerStatus
●重启●第一次心跳
●如果节点需要执行更多的任务
TaskTrackerStatus包含TaskTracker管理的worker的信息,例如可用的虚拟和物理内存以及有关CPU的信息。JobTracker保留了故障TaskTracker的黑名单以及最后一次接收到的心跳从任务追踪器上。因此,当接收到新的重新启动/第一个心跳时,JobTracker通过使用此信息,可以决定是否重新启动任务跟踪器或删除任务跟踪器黑名单
之后,TaskTracker的状态在JobTracker中更新,并有一个HeartbeatResponse创建。这个HeartbeatResponse包含TaskTracker将要采取的下一个动作。如果有任务要执行,TaskTracker需要新的任务(这是Heartbeat),并且它不在黑名单中,然后创建清理任务和设置任务清理/设置机制尚未进一步研究)。万一没有清理或者设置要执行的任务,JobTracker获得新任务。当任务可用时LunchTaskAction被封装在其中,然后JobTracker也会查找:
-要杀死的任务
- job to kill/cleanup
-尚未保存输出的任务。
所有这些动作,如果它们适用,将被添加到要在HeartbeatResponse中发送的动作列表中。Hadoop中实现的容错机制仅限于在给定的情况下重新分配任务执行失败。在这种情况下,支持两种场景:1. 如果分配给给定TaskTracker的任务失败,则通过Heartbeat进行通信用于通知JobTracker,如果可能的话,JobTracker会将任务重新分配给另一个节点。2. 如果TaskTracker发生故障,JobTracker会注意到故障情况,因为它不会接收任务追踪器的心跳然后,JobTracker将分配TaskTracker拥有的任务转到另一个TaskTracker。JobTracker中还有一个单点故障,因为如果它失败了,整个执行就会失败。
在Hadoop中实现容错的标准方法的主要好处在于它的简单性,并且它似乎在本地集群中工作得很好。然而,标准方法对于大型分布式基础设施来说是不够的,节点之间的距离可能太大,重新分配任务的时间损失可能会减慢系统的速度
主节点(NameNode)是hadoop中的单点故障。如果down,表示系统不可用。
从属(计算)节点失败是可以的,在失败时在它们上运行的任何东西都可以在不同的节点上重新运行。事实上,即使节点运行缓慢,也可能发生这种情况。
有一些项目/公司希望消除单点故障。如果你感兴趣的话,谷歌一下"hadoop ha"(高可用性)应该能帮你找到你的方法。