2011-01-27 1 views

답변

1

datanode가 다운되면 해당 노드에서 실행중인 작업 (작업 추적기로도 사용한다고 가정)이 실패하고 이러한 실패한 작업이 다른 작업 추적자에게 다시 실행되도록 할당됩니다. 죽은 데이터 노드에서 손실 된 데이터 블록은 클러스터를 통해 데이터를 복제하므로 다른 데이터 노드에서도 사용할 수 있습니다. 따라서 데이터 노드가 다운 된 경우에도 실패한 작업을 다시 실행하는 경우 매우 짧은 지연을 제외하고는 손실이 발생하지 않습니다. 이 모든 것은 프레임 워크에 의해 처리 될 것입니다. 귀하의 코드는 이것에 대해 걱정할 필요가 없습니다.

1

주로 HDFS 복제에 따라 다릅니다. 1보다 크면 작업은 "다운 된"서버에없는 블록을 요청합니다. 유효한 복제가 있으면 작업에 스트리밍되고 작업은 새 블록으로 다시 실행될 수 있습니다.

내 코드는이 예외적 인 조건을 어떻게 처리해야합니까?

전체 작업이 실패 할 경우에도 이와 같은 예외는 발생하지 않습니다. 이 경우 작업 일정을 변경하고 데이터 노드가 다시 복구되기를 바랍니다.

+0

흠 ... 복제가 사실상 3이며 테스트 과정에서 2 개의 데이터 노드를 가져 왔지만이 정보를 얻습니다 : INFO hdfs.DFSClient : 모든 노드에서 블록 blk_7178702856169522439_8519를 얻을 수 없습니다 : java.io.IOException : 라이브 노드에 현재 블록이 없습니다. – Meg

+1

그래서 복제가 완전히 완료되지 않았습니다. –