2011-01-27 1 views

Répondre

1

Si le datanode tombe en panne, les tâches s'exécutant sur ce nœud (en supposant que vous l'utilisiez également en tant que tasktracker) échoueront et ces tâches échouées seront assignées à d'autres tasktrackers pour une nouvelle exécution. Les blocs de données qui sont perdus dans le datanode mort seront disponibles dans d'autres datanodes car il y aura une réplication des données à travers le cluster. Donc, même si un datanode tombe en panne, il n'y aura pas de perte sauf pour un très court délai dans la ré-exécution des tâches échouées. Tout cela sera géré par le framework. Votre code ne doit pas s'inquiéter à ce sujet.

1

Cela dépend principalement de votre réplication HDFS. Si elle est supérieure à 1, le travail demandera un bloc qui n'est pas sur le serveur "abattu". S'il existe une réplication valide, elle sera transmise au travail et le travail pourra être réexécuté avec le nouveau bloc.

Comment mon code devrait-il gérer cette situation exceptionnelle?

Vous ne rencontrerez aucune exception de ce type, si tout le travail échoue. Dans ce cas, vous pouvez replanifier votre travail et espérer que le datanode remonte.

+0

Hmm ... Ma réplication est en fait 3 et j'ai descendu 2 datanodes au cours du test, mais ensuite je reçois ceci: INFO hdfs.DFSClient: Impossible d'obtenir le bloc blk_7178702856169522439_8519 à partir de n'importe quel noeud: java.io.IOException: Aucun nœud actif ne contient de bloc courant. – Meg

+1

La réplication n'est donc pas entièrement terminée. –

Questions connexes