S3DistCp(s3-dist-cp) - Amazon EMR

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

S3DistCp(s3-dist-cp)

Apache DistCp는 대량의 데이터를 복사하는 데 사용할 수 있는 오픈 소스 도구입니다. S3DistCp는 DistCp와 비슷하지만 AWS, 특히 Amazon S3에서 함께 작동하도록 최적화되었습니다. Amazon EMR 버전 4.0 및 이후에서 S3DistCp 명령은 s3-dist-cp이며, 클러스터 단계로 혹은 명령줄에 추가됩니다. S3DistCp를 사용하여 Amazon S3의 대량 데이터를 HDFS로 효율적으로 복사할 수 있습니다. HDFS에서는 Amazon EMR 클러스터의 후속 단계를 통해 데이터를 처리할 수 있습니다. 또한 S3DistCp를 사용하여 Amazon S3 버킷 간에 또는 HDFS에서 Amazon S3로 데이터를 복사할 수도 있습니다. S3DistCp는 버킷과 AWS 계정 간에 많은 수의 객체를 병렬로 복사하는 데 더 확장 가능하고 효율적입니다.

실제 시나리오에서 S3DistCP의 유연성을 보여주는 특정 명령은 AWS 빅 데이터 블로그의 S3DistCp 사용에 대한 7가지 팁을 참조하세요.

DistCp처럼 S3DistCp도 MapReduce를 사용하여 분산 방식으로 복사합니다. 여러 서버 간에 복사, 오류 처리, 복구 및 보고 작업을 공유합니다. Apache DistCp 오픈 소스 프로젝트에 대한 자세한 내용은 Apache Hadoop 설명서에서 DistCp guide를 참조하세요.

S3DistCp가 지정된 파일의 일부 또는 전체를 복사할 수 없는 경우 클러스터 단계가 실패하고 0 이외의 오류 코드를 반환합니다. 이러한 상황이 발생할 경우 S3DistCp는 부분적으로 복사된 파일을 지우지 않습니다.

중요

S3DistCp는 밑줄 문자를 포함하는 Amazon S3 버킷 이름을 지원하지 않습니다.

S3DistCp는 Parquet 파일의 연결을 지원하지 않습니다. 대신 PySpark를 사용하십시오. 자세한 내용은 Amazon EMR에서 parquet 파일 연결을 참조하세요.

S3DistCp를 사용하여 단일 파일(디렉터리 대신)을 S3에서 HDFS로 복사할 때 복사 오류를 방지하려면 Amazon EMR 버전 5.33.0 이상 또는 Amazon EMR 버전 6.3.0 이상을 사용합니다.

S3DistCp 옵션

S3DistCp는 DistCp와 비슷하지만 데이터를 복사하고 압축하는 방법을 변경하는 다양한 옵션 세트를 지원합니다.

S3DistCp를 직접 호출하면 다음 테이블에서 설명하는 옵션을 지정할 수 있습니다. 이 옵션은 인수 목록을 사용하여 단계에 추가됩니다. 다음 표에는 S3DistCp 인수 예가 나와 있습니다.

옵션 설명 필수
‑‑src=LOCATION

복사할 데이터의 위치입니다. 이 위치는 HDFS 또는 Amazon S3 위치일 수 있습니다.

예제: ‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node

중요

S3DistCp는 밑줄 문자를 포함하는 Amazon S3 버킷 이름을 지원하지 않습니다.

‑‑dest=LOCATION

데이터의 대상입니다. 이 위치는 HDFS 또는 Amazon S3 위치일 수 있습니다.

예제: ‑‑dest=hdfs:///output

중요

S3DistCp는 밑줄 문자를 포함하는 Amazon S3 버킷 이름을 지원하지 않습니다.

‑‑srcPattern=PATTERN

‑‑src에서 데이터의 하위 세트로 복사 작업을 필터링하는 정규식입니다. ‑‑srcPattern‑‑groupBy를 둘 다 지정하지 않으면 ‑‑src의 모든 데이터가 ‑‑dest로 복사됩니다.

정규식 인수에 별표(*) 같은 특수 문자가 포함되어 있는 경우 정규식 또는 전체 ‑‑args 문자열을 작은따옴표(')에 포함해야 합니다.

예제: ‑‑srcPattern=.*daemons.*-hadoop-.*

아니요
‑‑groupBy=PATTERN

S3DistCp에서 식과 일치하는 파일을 연결하는 정규식입니다. 예를 들면 이 옵션을 사용하여 한 시간 동안 작성된 모든 로그 파일을 단일 파일로 결합할 수 있습니다. 연결된 파일 이름은 그룹화 정규식과 일치하는 값입니다.

괄호는 파일을 그룹화하는 방식을 나타내며, 괄호 안에 지정된 문과 일치하는 모든 항목이 단일 출력 파일로 결합됩니다. 괄호에 지정된 문이 정규식에 포함되지 않는 경우 S3DistCp 단계에 대해 클러스터가 실패하며 오류가 발생합니다.

정규식 인수에 별표(*) 같은 특수 문자가 포함되어 있는 경우 정규식 또는 전체 ‑‑args 문자열을 작은따옴표(')에 포함해야 합니다.

‑‑groupBy를 지정하면 지정한 패턴과 일치하는 파일만 복사됩니다. ‑‑groupBy‑‑srcPattern을 동시에 지정할 필요는 없습니다.

예제: ‑‑groupBy=.*subnetid.*([0-9]+-[0-9]+-[0-9]+-[0-9]+).*

아니요
‑‑targetSize=SIZE

‑‑groupBy 옵션에 따라 생성할 파일의 크기로, 단위는 메비바이트(MiB)입니다. 이 값은 정수여야 합니다. ‑‑targetSize를 설정하는 경우 S3DistCp에서는 이 크기에 맞추려고 합니다. 복사한 파일의 실제 크기는 이 값보다 크거나 작을 수도 있습니다. 작업이 데이터 파일의 크기에 따라 집계되므로 대상 파일 크기가 소스 데이터 파일 크기와 일치할 수 있습니다.

‑‑groupBy에 의해 연결된 파일이 ‑‑targetSize의 값보다 크면 부분 파일로 나눠지고 이름 끝에 숫자 값이 순차적으로 지정됩니다. 예를 들어 myfile.gz에 연결된 파일은 myfile0.gz, myfile1.gz 등 여러 부분으로 나눠집니다.

예제: ‑‑targetSize=2

아니요
‑‑appendToLastFile

이미 있는 파일을 Amazon S3에서 HDFS로 복사하는 경우 S3DistCp의 동작을 지정합니다. 이 옵션은 새 파일 데이터를 기존 파일에 추가합니다. ‑‑appendToLastFile‑‑groupBy와 함께 사용할 경우 동일 그룹과 일치하는 파일에 새 데이터가 추가됩니다. 이 옵션은 ‑‑targetSize와 함께 사용하는 경우 ‑‑groupBy. 동작과 관련이 있습니다.

아니요
‑‑outputCodec=CODEC

복사한 파일에 사용할 압축 코덱을 지정합니다. 이때 gzip, gz, lzo, snappy 또는 none 값을 사용할 수 있습니다. 예를 들어 이 옵션을 사용하여 Gzip으로 압축된 입력 파일을 LZO로 압축된 출력 파일로 변환하거나 복사 작업의 일부로서 파일의 압축을 풀 수 있습니다. 출력 코덱을 선택하는 경우 파일 이름에 해당 확장명(예: gzgzip의 경우, 확장명은 .gz)이 추가됩니다. ‑‑outputCodec의 값을 지정하지 않으면 파일이 압축 변화 없이 복사됩니다.

예제: ‑‑outputCodec=lzo

아니요
‑‑s3ServerSideEncryption

SSL을 사용하여 대상 데이터가 전송되고 AWS 서비스 측 키를 사용하여 Amazon S3에서 자동으로 암호화되는지 확인합니다. S3DistCp를 사용하여 데이터를 검색할 때 객체가 자동으로 암호화 해제됩니다. 암호화되지 않은 객체를 암호화가 요구되는 Amazon S3 버킷으로 복사하려는 경우 작업이 실패합니다. 자세한 내용은 데이터 암호화 사용을 참조하세요.

예제: ‑‑s3ServerSideEncryption

아니요
‑‑deleteOnSuccess

이 옵션을 지정한 경우 복사 작업이 성공적으로 수행되면 S3DistCp가 복사한 파일이 소스 위치에서 삭제됩니다. 이 옵션은 예약 작업으로서 로그 파일 같은 출력 파일을 한 위치에서 다른 위치로 복사하려 하며 동일한 파일을 두 번 복사하기를 원치 않는 경우에 유용합니다.

예제: ‑‑deleteOnSuccess

아니요
‑‑disableMultipartUpload

멀티파트 업로드 사용을 비활성화합니다.

예제: ‑‑disableMultipartUpload

아니요
‑‑multipartUploadChunkSize=SIZE

Amazon S3 멀티파트 업로드의 각 파트 크기(MiB). S3DistCp는 multipartUploadChunkSize보다 큰 데이터를 복사할 때 멀티파트 업로드를 사용합니다. 작업 성능을 향상시키기 위해 각 부품 크기를 늘릴 수 있습니다. 기본 크기는 128MiB입니다.

예제: ‑‑multipartUploadChunkSize=1000

아니요
‑‑numberFiles

출력 파일 앞에 순차 번호를 붙입니다. ‑‑startingIndex에 다른 값을 지정하는 경우가 아니면 번호는 0부터 시작합니다.

예제: ‑‑numberFiles

아니요
‑‑startingIndex=INDEX

‑‑numberFiles와 함께 사용되어 순서에서 첫 번째 번호를 지정합니다.

예제: ‑‑startingIndex=1

아니요
‑‑outputManifest=FILENAME

S3DistCp에서 복사한 모든 파일의 목록을 포함하는 텍스트 파일(Gzip으로 압축됨)을 생성합니다.

예제: ‑‑outputManifest=manifest-1.gz

아니요
‑‑previousManifest=PATH

‑‑outputManifest 플래그를 사용하여 이전 S3DistCp 호출 중에 생성된 매니페스트 파일을 읽습니다. ‑‑previousManifest 플래그를 설정한 경우 S3DistCp가 매니페스트에 나열된 파일을 복사 작업에서 제외시킵니다. ‑‑outputManifest‑‑previousManifest와 함께 지정하는 경우 복사되지 않았더라도 이전 매니페스트에 나열된 파일이 새 매니페스트 파일에도 나타납니다.

예제: ‑‑previousManifest=/usr/bin/manifest-1.gz

아니요
‑‑requirePreviousManifest

이전 S3DistCp 호출 중에 생성된 이전 매니페스트가 필요합니다. false로 설정된 경우 이전 매니페스트가 지정되지 않았을 때 오류가 발생하지 않습니다. 기본값은 true입니다.

아니요
‑‑copyFromManifest

S3DistCp에서 파일 목록을 복사에서 제외하는 것이 아니라 복사할 파일 목록으로서 지정한 매니페스트 파일을 사용하도록 ‑‑previousManifest의 동작을 반대로 설정합니다.

예제: ‑‑copyFromManifest ‑‑previousManifest=/usr/bin/manifest-1.gz

아니요
‑‑s3Endpoint=ENDPOINT

파일 업로드 시 사용할 Amazon S3 엔드포인트를 지정합니다. 이 옵션은 소스 및 대상 모두의 엔드포인트를 설정합니다. 설정하지 않은 경우 기본 엔드포인트는 s3.amazonaws.com입니다. Amazon S3 엔드포인트 목록은 리전 및 엔드포인트를 참조하세요.

예제: ‑‑s3Endpoint=s3.eu-west-1.amazonaws.com

아니요
‑‑storageClass=CLASS

대상이 Amazon S3일 때 사용할 스토리지 클래스입니다. 유효한 값은 STANDARD 및 REDUCED_REDUNDANCY입니다. 이 옵션을 지정하지 않은 경우 S3DistCp에서 스토리지 클래스를 보존합니다.

예제: ‑‑storageClass=STANDARD

아니요
‑‑srcPrefixesFile=PATH

Amazon S3(s3://), HDFS(hdfs:///) 또는 로컬 파일 시스템(file:/)에 있는 src 접두사 목록(줄당 접두사 한 개)을 포함하는 텍스트 파일입니다.

srcPrefixesFile을 제공하는 경우 S3DistCp에서 src 경로를 나열하지 않습니다. 대신에 결합된 결과로서 소스 목록을 생성하여 이 파일에 지정된 모든 접두사를 나열합니다. 이러한 접두사를 사용하는 src 경로와는 달리, 상대 경로를 사용하여 대상 경로를 생성합니다. srcPattern도 지정한 경우 이 패턴이 소스 접두사의 결합된 목록 결과에 적용되어 입력을 추가로 필터링합니다. copyFromManifest를 사용하는 경우 매니페스트의 객체가 복사되고 srcPrefixesFile이 무시됩니다.

예제: ‑‑srcPrefixesFile=PATH

아니요

위의 옵션 외에도, S3DistCp는 도구 인터페이스를 구현하므로 일반 옵션이 지원됩니다.

S3DistCp를 클러스터에 단계로 추가

클러스터에서 단계로 추가하여 S3DistCp를 호출할 수 있습니다. 콘솔, CLI 또는 API를 사용하여 시작 시 클러스터에 또는 실행 중인 클러스터에 단계를 추가할 수 있습니다. 다음 예제에서는 S3DistCp를 사용하여 실행 중인 클러스터에 추가하는 방법을 보여 줍니다. 클러스터에 단계를 추가하는 방법에 대한 자세한 내용은 Amazon EMR 관리 안내서에서 클러스터에 작업 제출을 참조하세요.

를 사용하여 실행 중인 클러스터에 S3DistCp 단계를 추가하려면 AWS CLI

에서 Amazon EMR 명령을 사용하는 방법에 대한 자세한 내용은 AWS CLI 명령 참조를 AWS CLI참조하세요.

  • S3DistCp를 호출하는 클러스터에 단계를 추가하려면 S3DistCp에서 복사 작업을 수행하는 방식을 지정하는 파라미터를 인수로 전달합니다.

    다음 예제에서는 Amazon S3에서 hdfs:///output으로 대몬(daemon) 로그를 복사합니다. 다음 명령을 실행합니다.

    • ‑‑cluster-id는 클러스터를 지정합니다.

    • Jar은 S3DistCp JAR 파일의 위치입니다. command-runner.jar을 사용하여 클러스터에서 명령을 실행하는 방법의 예제는 사용자 지정 JAR 단계를 제출하여 스크립트 또는 명령 실행을 참조하세요.

    • Args는 S3DistCp로 전달할 옵션 이름-값 페어의 쉼표로 구분된 목록입니다. 사용 가능한 옵션의 전체 목록은 S3DistCp 옵션 단원을 참조하십시오.

    S3DistCp 복사 단계를 실행 중인 클러스터에 추가하려면 Amazon S3 또는 로컬 파일 시스템에 저장된 JSON 파일(이 예제의 경우 myStep.json)에 다음을 추가합니다. j-3GYXXXXXX9IOK를 클러스터 ID로 바꾸고 amzn-s3-demo-bucket을 Amazon S3 버킷 이름으로 바꿉니다.

    [ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*[a-zA-Z,]+"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]
    aws emr add-steps ‑‑cluster-id j-3GYXXXXXX9IOK ‑‑steps file://./myStep.json
예 Amazon S3에서 HDFS로 로그 파일 복사

이 예제에서는 실행 중인 클러스터에 단계를 추가하여 Amazon S3 버킷에 저장된 로그 파일을 HDFS로 복사하는 방법을 보여줍니다. 이 예제에서 ‑‑srcPattern 옵션은 복사된 데이터를 데몬 로그로 제한하는 데 사용됩니다.

‑‑srcPattern 옵션을 사용하여 Amazon S3에서 HDFS로 로그 파일을 복사하려면 Amazon S3 또는 로컬 파일 시스템에 저장된 JSON 파일(이 예제의 경우 myStep.json)에 다음을 추가합니다. j-3GYXXXXXX9IOK를 클러스터 ID로 바꾸고 amzn-s3-demo-bucket을 Amazon S3 버킷 이름으로 바꿉니다.

[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*daemons.*-hadoop-.*"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]