Amazon DynamoDB에서 읽거나 쓸 때 AWS Glue ETL 워크로드를 최적화하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 8월 16일

Amazon DynamoDB에서 읽거나 쓰기 위해 AWS Glue 추출, 변환, 로드(ETL) 작업을 최적화하고 싶습니다.

-또는-

내 AWS Glue ETL 작업으로 인해 DynamoDB 테이블에 대한 제한 예외가 발생합니다.

해결 방법

DynamoDB 테이블에서 읽거나 쓸 AWS Glue ETL 작업을 생성하기 전에 다음 구성 업데이트를 고려하세요. 이러한 업데이트는 AWS Glue와 DynamoDB에서 리소스 사용을 최적화하는 데 도움이 될 수 있습니다.

DynamoDB에서 읽기

  • dynamodb.throughput.read.percent: 이 구성 변수는 사용할 읽기 용량 단위(RCU)의 백분율을 나타냅니다. 이 변수의 기본값은 0.5로 설정됩니다. 허용 가능한 값의 범위는 0.1~1.5 사이입니다. 값 0.5는 AWS Glue 작업이 테이블의 읽기 용량의 절반을 소비하려고 시도함을 나타냅니다. 실제 읽기 속도는 DynamoDB 테이블에 균일 키 배포가 있는지 여부와 같은 요인에 따라 다릅니다.
    이 예제를 사용하여 작업의 대략적인 실행 시간을 계산합니다. DynamoDB 테이블에 대해 100개의 RCU를 프로비저닝했다고 가정합니다. 1RCU를 사용하면 4KB의 데이터를 읽을 수 있습니다. 100RCU를 사용하면 초당 409,600바이트의 읽기 100개를 수행할 수 있습니다. 테이블에 20GB(21,474,836,480바이트)의 데이터가 있고 dynamodb.throughput.read.percent의 값을 1.0으로 설정했다고 가정합니다. 즉, 작업이 100%의 RCU를 사용하여 전체 테이블 스캔을 수행합니다.
    그러면 다음과 같이 작업의 대략적인 실행 시간을 계산할 수 있습니다.
    테이블 크기/초당 읽기 바이트 수=21,474,836,480/409,600=52,429초=14.56시간
    작업의 실행 시간을 줄이기 위해 dynamodb.throughput.read.percent에 적절한 값을 설정하여 RCU 수를 늘릴 수 있습니다. 자세한 내용은 읽기 용량을 참조하세요.
    DynamoDB 테이블이 큰 경우 프로비저닝됨 모드 대신 테이블에 대한 온디맨드 읽기/쓰기 용량 모드를 선택합니다. 새 테이블을 생성할 때 온디맨드 읽기/쓰기 용량 모드를 선택하거나 기존 테이블의 용량 탭에서 이 설정을 업데이트할 수 있습니다. 자세한 내용은 읽기/쓰기 용량 모드를 참조하세요.
  • dynamodb.splits: 이 연결 옵션은 데이터를 읽는 동안 테이블이 분할되는 분할 수를 정의합니다. 기본값은 1로 설정됩니다. 허용되는 값의 범위는 1~1,000,0000 사이입니다. 값 1은 병렬 처리가 없음을 나타냅니다. 이 변수에 대해 더 높은 값을 설정하는 것이 좋습니다. 달성할 수 있는 병렬화의 양은 AWS Glue 작업자 유형과 작업에 대해 구성된 작업자 수에 따라 다릅니다. dynamodb.splits에 대한 값으로 사용할 수 있는 numSlots를 계산하려면 "connectionType": "dynamodb"를 소스로 사용"dynamodb.splits" 아래에 있는 공식을 사용하세요.

DynamoDB에 쓰기

  • dynamodb.throughput.write.percent: 이 구성 변수는 사용할 쓰기 용량 단위(WCU)의 백분율을 정의합니다. 기본값은 0.5로 설정됩니다. 허용 가능한 값의 범위는 0.1~1.5 사이입니다. 값 0.5는 AWS Glue가 테이블의 쓰기 용량의 절반을 사용하려고 시도한다는 것을 의미합니다. 실제 쓰기 속도는 DynamoDB 테이블에 균일 키 배포가 있는지 여부와 같은 요인에 따라 다릅니다. 사용 사례에 따라 이 변수의 값을 업데이트합니다.
    DynamoDB 테이블이 큰 경우 프로비저닝됨 모드 대신 테이블에 대한 온디맨드 읽기/쓰기 용량 모드를 선택하는 것이 좋습니다.
    자세한 내용은 "connectionType": "dynamodb"를 싱크로 사용 아래의 "dynamodb.throughput.write.percent"를 참조하세요.
  • dynamodb.output.numParallelTasks: 이 연결 옵션은 DynamoDB에 동시에 쓰는 병렬 작업의 수를 정의합니다. 이것은 선택적 파라미터입니다. 이 파라미터를 지정하지 않으면 numParallelTasks 값은 numPartitions, numSlotsnumExecutors를 기반으로 계산됩니다. 이 값은 dynamodb.output.numParallelTasks의 값으로 사용할 수 있습니다. 자세한 공식은 "connectionType": "dynamodb"를 싱크로 사용 아래의 "dynamodb.output.numParallelTasks"를 참조하세요.

DynamoDB 테이블에서 읽고 쓰는 방법을 보여주는 코드 예제는 코드 예제를 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?