2012-02-06 5 views
7

기본 블록 크기 (128MB)를 사용 중이며 130MB를 사용하는 파일이 있다고 가정합니다. 하나의 풀 사이즈 블록과 하나의 블록을 2 MB로 사용합니다. 그런 다음 20MB를 파일에 추가해야합니다 (총 150MB 필요). 무슨 일이야?추가 기능이있는 HDFS는 어떻게 작동합니까?

HDFS는 실제로 마지막 블록의 크기를 2MB에서 22MB로 조정합니까? 아니면 새로운 블록을 만드시겠습니까?

HDFS의 파일에 첨부를하면 어떻게 처리됩니까? 데이터 손실의 위험이 있습니까?

HDFS는 세 번째 블록을 만들고 20 + 2MB를 넣고 2MB 블록을 삭제합니다. 그렇다면이 기능은 어떻게 동시에 작동합니까?

답변

3

Jira issuementioned beforelatest design document, 우리는 귀하의 질문에 다음과 같은 답변을 찾을에 따르면

    HDFS는 마지막 블록에 추가됩니다
  1. , 하지는 새로운 블록을 생성하고로부터 데이터를 복사 오래된 마지막 블록. 이것은 HDFS가 일반 파일 시스템을 사용하여 이러한 블록 파일을 일반 파일로 작성하기 때문에 어렵지 않습니다. 일반 파일 시스템에는 새 데이터를 추가하는 메커니즘이 있습니다. 물론 마지막 블록을 채우면 새 블록이 생성됩니다.
  2. HDFS에서 동시에 하나의 파일에만 쓰기 또는 추가가 허용되므로 처리 할 동시성이 없습니다. 이것은 namenode에 의해 관리됩니다. 다른 사람이 쓰기를 시작하려면 파일을 닫아야합니다.
  3. 파일의 마지막 블록이 복제되지 않으면 추가가 실패합니다. 추가는 단일 복제본에 쓰여지고, 복제본은 일반 작성과 유사하게 복제본에 파이프 라인합니다. 저에게 일반적인 쓰기와 비교하여 dataloss의 추가 위험이없는 것처럼 보입니다.
+0

닫힌 파일에 추가 할 수 있습니까? – David

+0

파일을 열 때 append를 호출하면됩니다. 열려있는 파일에 append를 호출 할 수 없습니다. 그런 다음 append를 호출하고 출력 스트림을 얻으면 바이트를 파일 끝에 덤프 할 수 있습니다. – EthanP

+0

이 기능이 도입되었을 때 올바르게 기억한다면 새로 추가 된 파일을 열어 두어 "추가"할 수있게해야합니다 (실제 추가는 아님). 당신은 HDFS가 1) 파일을 생성 할 수 있다고 말하고 있습니까? 2) 닫습니다. 3) 다시여십시오. 4) 데이터를 추가하십시오. – David

1

Hadoop 분산 파일 시스템은 파일에 대한 추가 기능을 지원하며,이 경우 20MB를 예제의 두 번째 블록 (처음에는 2MB가있는 블록)에 추가해야합니다. 그렇게하면 128MB와 22MB의 두 블록으로 끝납니다.

This은 HDFS 용 append java docs에 대한 참조입니다.

+4

나는 경로가 동일하게 유지된다는 것을 알고 있습니다. 하지만 블록은 한 번 쓰기 때문에 HDFS가 20 + 2 MB를 넣고 세 번째 블록을 만들고 2MB 블록을 삭제한다고 생각합니다. 하지만 어떻게 동시에 작동합니까? – David

3

여기에는 추가에 대한 매우 포괄적 인 design document가 있으며 동시성 문제가 포함되어 있습니다.

현재 HDFS docs은 해당 문서에 대한 링크를 제공하므로 가장 최근의 것으로 간주 할 수 있습니다. (문서 날짜는 2009)

및 관련 issue.