2011-01-27 8 views

答えて

1

datanodeがダウンすると、そのノードで実行中のタスク(タスクトラッカーとしても使用していると仮定します)は失敗し、これらの失敗したタスクは他のタスクトラッカーに割り当てられて再実行されます。デッドデータノードで失われたデータブロックは、クラスタ間でデータが複製されるため、他のデータノードでも使用できます。したがって、たとえデータノードがダウンしたとしても、失敗したタスクの再実行での非常に短い遅延を除いて、いかなる損失もありません。これらはすべてフレームワークによって処理されます。あなたのコードはこれを心配する必要はありません。

1

これは、主にHDFSレプリケーションに依存します。 1より大きい場合、ジョブは「ダウン」されたサーバー上にないブロックを要求します。有効なレプリケーションがあれば、ジョブにストリーム配信され、ジョブは新しいブロックで再度実行されます。

私のコードはこの例外条件をどのように処理する必要がありますか?

ジョブ全体が失敗した場合でも、このような例外は発生しません。この場合、ジョブのスケジュールを変更して、データノードが復旧することを期待できます。

+0

Hmm ...私の複製はinfact 3であり、テスト中に2つのデータノードをダウンさせましたが、次にこれを取得します:INFO hdfs.DFSClient:任意のノードからブロックblk_7178702856169522439_8519を取得できませんでした:java.io.IOException:現在のブロックを含むライブノードはありません。 – Meg

+1

複製が完全に完了していません。 –

関連する問題