복붙노트

[HADOOP] Hadoop 2.0 데이터 쓰기 작업 승인

HADOOP

Hadoop 2.0 데이터 쓰기 작업 승인

hadoop 데이터 쓰기에 관한 작은 쿼리가 있습니다.

Apache 설명서

아래 이미지에서 쓰기 확인이 성공적으로 처리되면?

1) 첫 번째 데이터 노드에 데이터 쓰기?

2) 첫 번째 데이터 노드 + 2 개의 다른 데이터 노드에 데이터 쓰기?

나는이 질문을하고 있는데, 나는 YouTube 비디오에서 두 개의 상충되는 진술을 들었다. 하나의 비디오는 데이터가 하나의 데이터 노드에 쓰여지고 다른 비디오는 일단 세 개의 노드 모두에 데이터를 기록한 후에 만 ​​수신 확인이 전송되면 쓰기가 성공한 것으로 인용됩니다.

해결법

  1. ==============================

    1.

    1 단계 : 클라이언트는 DistributedFileSystem에서 create () 메소드를 호출하여 파일을 만듭니다.

    2 단계 : DistributedFileSystem은 namenode에 대한 RPC 호출을 만들어 파일 시스템의 네임 스페이스에 새 파일을 만들고 블록을 연결하지 않습니다.

    namenode는 파일이 존재하지 않고 클라이언트가 파일을 만들 수있는 권한을 가지고 있는지 확인하기 위해 다양한 검사를 수행합니다. 이러한 검사가 통과되면 namenode는 새 파일을 기록합니다. 그렇지 않은 경우 파일 작성이 실패하고 클라이언트가 IOException을 던집니다. TheDistributedFileSystem은 클라이언트가 데이터 쓰기를 시작할 FSDataOutputStream을 반환합니다.

    3 단계 : 클라이언트가 데이터를 쓰면 DFSOutputStream은 데이터를 패킷으로 분할하여 데이터 대기열이라는 내부 대기열에 씁니다. 데이터 대기열은 DataStreamer에 의해 소비되며, 이는 복제본을 저장하기에 적합한 데이터 노드의 목록을 선택하여 namenode에 새 블록을 할당하도록 요청합니다. 데이터 노드의 목록은 파이프 라인을 형성하며 여기서는 복제 수준이 3이라고 가정합니다. 따라서 파이프 라인에 3 개의 노드가 있습니다. DataStreamer는 패킷을 파이프 라인의 첫 번째 데이터 노드로 스트리밍합니다. 파이프 라인은 패킷을 저장하고 파이프 라인의 두 번째 데이터 노드로 전달합니다.

    4 단계 : 마찬가지로 두 번째 데이터 노드는 패킷을 저장하고이를 파이프 라인의 세 번째 (및 마지막) 데이터 노드로 전달합니다.

    5 단계 : DFSOutputStream은 또한 ack 대기열이라고하는 데이터 노드에 의해 수신 확인을 기다리고있는 패킷의 내부 대기열을 유지합니다. 패킷은 파이프 라인의 모든 데이터 노드가 확인 응답 한 경우에만 ack 대기열에서 제거됩니다.

    6 단계 : 클라이언트가 데이터 쓰기를 완료하면 스트림에서 close ()를 호출합니다.

    7 단계 :이 작업은 나머지 모든 패킷을 데이터 노드 파이프 라인으로 플러시하고 파일이 완료되었음을 알리기 위해 namenode에 접속하기 전에 확인을 기다립니다. namenode는 파일이 구성되어있는 블록을 이미 알고 있으므로 블록을 기다려야합니다 성공적으로 반환되기 전에 최소한으로 복제되어야한다.

  2. ==============================

    2.하나의 복제본이 성공적으로 기록되면 데이터 쓰기 작업은 성공한 것으로 간주됩니다. 이 파일은 hdfs-default.xml 파일의 dfs.namenode.replication.min 속성에 의해 관리됩니다. 복제본을 쓰는 동안 데이터 노드에 오류가있는 경우 기록 된 데이터는 실패한 것으로 간주되지 않지만 클러스터의 균형을 조정하는 동안 누락 된 복제본을 생성하는 과소 복제됩니다. Ack 패킷은 데이터 노드에 기록 된 데이터의 상태와 독립적입니다. 데이터 패킷이 기록되지 않더라도, 확인 응답 패킷이 전달된다.

    하나의 복제본이 성공적으로 기록되면 데이터 쓰기 작업은 성공한 것으로 간주됩니다. 이 파일은 hdfs-default.xml 파일의 dfs.namenode.replication.min 속성에 의해 관리됩니다. 복제본을 쓰는 동안 데이터 노드에 오류가있는 경우 기록 된 데이터는 실패한 것으로 간주되지 않지만 클러스터의 균형을 조정하는 동안 누락 된 복제본을 생성하는 과소 복제됩니다. Ack 패킷은 데이터 노드에 기록 된 데이터의 상태와 독립적입니다. 데이터 패킷이 기록되지 않더라도, 확인 응답 패킷이 전달된다.

  3. from https://stackoverflow.com/questions/32038000/hadoop-2-0-data-write-operation-acknowledgement by cc-by-sa and MIT license