EMRFS 일관된 보기 메타데이터 - Amazon EMR

EMRFS 일관된 보기 메타데이터

EMRFS 일관된 보기는 DynamoDB 테이블을 사용하여 Amazon S3에서 EMRFS와 동기화되었거나 EMRFS에서 생성된 객체를 추적하는 방법으로 일관성을 추적합니다. 이 메타데이터는 모든 작업(읽기, 쓰기, 업데이트 및 복사)를 추적하는 데 사용되며, 실제 내용은 저장되지 않습니다. 이 메타데이터는 Amazon S3에서 수신된 객체나 메타데이터가 예상과 일치하는지 여부를 검증하는 데 사용됩니다. 이 확인을 통해 EMRFS는 EMRFS에서 Amazon S3에 기록하는 새 객체와 EMRFS와 동기화된 객체에 대한 쓰기 후 읽기 일관성 및 목록 일관성을 검사할 수 있습니다. 여러 클러스터가 동일한 메타데이터를 공유할 수 있습니다.

메타데이터에 항목을 추가하는 방법

sync 또는 import 하위 명령을 사용하여 항목을 메타데이터에 추가할 수 있습니다. sync는 경로에 Amazon S3 객체의 상태를 반영하지만 import는 새 항목을 메타데이터에 추가하는 데에만 사용됩니다. 자세한 내용은 EMRFS CLI 명령 참조 섹션을 참조하세요.

메타데이터와 Amazon S3 객체 간 차이를 확인하는 방법

메타데이터와 Amazon S3 간의 차이를 확인하려면 EMRFS CLI의 diff 하위 명령을 사용합니다. 자세한 내용은 EMRFS CLI 명령 참조 섹션을 참조하세요.

메타데이터 작업이 제한되는지 여부를 알아보는 방법

EMRFS는 메타데이터에 대한 읽기 및 쓰기 작업의 기본 처리량 제한을 각각 500 유닛 및 100 유닛으로 설정합니다. 객체 또는 버킷 수가 많으면 작업이 이 용량을 초과하여 DynamoDB에서 작업을 제한합니다. 예를 들어 애플리케이션에서 이러한 용량 제한을 초과하는 작업을 수행하려는 경우 EMRFS에서 ProvisionedThroughputExceededException이 발생할 수 있습니다. 제한 시 EMRFS CLI 도구는 작업이 완료될 때까지 또는 Amazon EMR에서 Amazon S3로 객체 쓰기 최대 재시도 값에 도달할 때 지수 백오프를 사용하여 DynamoDB 테이블에 쓰는 작업을 재시도합니다.

처리 용량 한도를 구성할 수 있습니다. 그러나 DynamoDB의 읽기 및 쓰기 작업에 대한 파티션 제한은 초당 3,000의 읽기 용량 유닛(RCU) 및 1,000의 쓰기 용량 유닛(WCU)이 적용됩니다. 제한으로 인한 sync 실패를 방지하려면 읽기 작업의 처리량을 3,000 RCU, 쓰기 작업의 처리량을 1,000 WCU 미만으로 제한하는 것이 좋습니다. 사용자 지정 처리량 용량 제한을 설정하는 방법에 대한 지침은 일관된 보기 구성 섹션을 참조하세요.

제한된 읽기 및 쓰기 요청 수를 볼 수 있는 DynamoDB 콘솔에서 EMRFS 메타데이터에 대한 Amazon CloudWatch 지표도 볼 수 있습니다. 제한된 요청에 대해 0이 아닌 값을 지정한 읽기 또는 쓰기 작업에 대해 할당된 처리 용량을 높이는 것이 애플리케이션에 도움이 될 수 있습니다. 또한 애플리케이션이 장시간 읽기 또는 쓰기 작업에 대해 할당된 최대 처리 용량에 근접하는 경우에도 성능 이점을 얻을 수 있습니다.

주목할 만한 EMRFS 작업에 대한 처리량 특성

읽기 및 쓰기 작업의 처리 용량 기본값은 각각 400단위 및 100단위입니다. 다음과 같은 성능 특성은 특정 작업에 필요한 처리량을 결정하는 데 도움이 됩니다. 이러한 테스트는 단일 노드 m3.large 클러스터를 사용하여 수행되었습니다. 모든 작업이 단일 스레드입니다. 성능은 특정 애플리케이션 특성에 따라 크게 달라지므로 파일 시스템 작업을 최적화하기 위해 실험이 필요할 수도 있습니다.

작업 초당 평균 읽기 초당 평균 쓰기
create(객체) 26.79 6.70
delete(객체) 10.79 10.79
delete(1000개 객체를 포함하는 디렉터리) 21.79 338.40
getFileStatus(객체) 34.70 0
getFileStatus(디렉터리) 19.96 0
listStatus(객체 1개를 포함하는 디렉터리) 43.31 0
listStatus(10개 객체를 포함하는 디렉터리) 44.34 0
listStatus(100개 객체를 포함하는 디렉터리) 84.44 0
listStatus(1,000개 객체를 포함하는 디렉터리) 308.81 0
listStatus(10,000개 객체를 포함하는 디렉터리) 416.05 0
listStatus(100,000개 객체를 포함하는 디렉터리) 823.56 0
listStatus(1M 객체를 포함하는 디렉터리) 882.36 0
mkdir(120초 동안 지속) 24.18 4.03
mkdir 12.59 0
rename(객체) 19.53 4.88
rename(1000개 객체를 포함하는 디렉터리) 23.22 339.34
메타데이터 스토어에서 오래된 데이터를 삭제하는 단계를 제출하려면

사용자가 DynamoDB 기반 메타데이터에서 특정 항목을 제거해야 할 때가 있습니다. 이 작업을 수행하면 테이블 관련 스토리지 비용을 절감할 수 있습니다. 사용자는 EMRFS CLI delete 하위 명령을 사용하여 특정 항목을 수동으로 또는 프로그래밍 방식으로 삭제할 수 있습니다. 하지만 메타데이터의 항목을 삭제할 경우 EMRFS에서 더 이상 일관성 검사가 수행되지 않습니다.

작업 완료 후 프로그래밍 방식으로 삭제하는 작업은 EMRFS CLI에서 명령을 실행하는 최종 단계를 클러스터에 제출함으로써 수행할 수 있습니다. 예를 들어 다음 명령을 입력하여 클러스터에 2일 이상 지난 모든 항목을 삭제하도록 하는 단계를 클러스터에 제출합니다.

aws emr add-steps --cluster-id j-2AL4XXXXXX5T9 --steps Name="emrfsCLI",Jar="command-runner.jar",Args=["emrfs","delete","--time","2","--time-unit","days"] { "StepIds": [ "s-B12345678902" ] }

반환된 StepId 값을 사용하여 작업 결과에 대한 로그를 확인합니다.