

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# EMRFS 일관된 보기 메타데이터
<a name="emrfs-metadata"></a>

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

**메타데이터에 항목을 추가하는 방법**  
`sync` 또는 `import` 하위 명령을 사용하여 항목을 메타데이터에 추가할 수 있습니다. `sync`는 경로에 Amazon S3 객체의 상태를 반영하지만 `import`는 새 항목을 메타데이터에 추가하는 데에만 사용됩니다. 자세한 내용은 [EMRFS CLI 명령 참조](emrfs-cli-reference.md) 단원을 참조하십시오.

**메타데이터와 Amazon S3 객체 간 차이를 확인하는 방법**  
메타데이터와 Amazon S3 간의 차이를 확인하려면 EMRFS CLI의 `diff` 하위 명령을 사용합니다. 자세한 내용은 [EMRFS CLI 명령 참조](emrfs-cli-reference.md) 단원을 참조하십시오.

**메타데이터 작업이 제한되는지 여부를 알아보는 방법**  
EMRFS는 메타데이터에 대한 읽기 및 쓰기 작업의 기본 처리량 제한을 각각 500 유닛 및 100 유닛으로 설정합니다. 객체 또는 버킷 수가 많으면 작업이 이 용량을 초과하여 DynamoDB에서 작업을 제한합니다. 예를 들어, 애플리케이션에서 이러한 용량 제한을 초과하는 작업을 수행하려는 경우 EMRFS에서 `ProvisionedThroughputExceededException`이 발생할 수 있습니다. 제한 시 EMRFS CLI 도구는 작업이 완료될 때까지 또는 Amazon EMR에서 Amazon S3로 객체 쓰기 최대 재시도 값에 도달할 때 [지수 백오프](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)를 사용하여 DynamoDB 테이블에 쓰는 작업을 재시도합니다.

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

제한된 읽기 및 쓰기 요청 수를 볼 수 있는 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 값을 사용하여 작업 결과에 대한 로그를 확인합니다.