Amazon S3에서 Amazon EMR 클러스터의 HDFS로 대량의 데이터를 복사하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2020년 2월 11일

Amazon Simple Storage Service(Amazon S3)에서 Amazon EMR 클러스터로 대량의 데이터를 복사하고 싶습니다. 가장 좋은 방법은 무엇인가요?

간략한 설명

S3DistCp를 사용하여 Amazon S3와 Amazon EMR 클러스터 간에 데이터를 복사합니다. S3DistCp는 Amazon EMR 클러스터에 기본적으로 설치되어 있습니다. S3DistCp를 호출하려면 시작할 때 또는 클러스터가 실행된 후에 단계로 이를 추가합니다.

해결 방법

실행 중인 클러스터에 AWS 명령줄 인터페이스(AWS CLI)를 사용하여 S3DistCp 단계를 추가하는 방법은 S3DistCp를 클러스터에 단계로 추가를 참조하세요.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

콘솔을 사용하여 S3DistCp 단계를 추가하려면 다음을 수행하세요.

1.    Amazon EMR 콘솔을 열고 [클러스터(Clusters)]를 선택합니다.

2.    목록에서 Amazon EMR 클러스터를 선택한 다음 단계를 선택합니다.

3.    Add step(단계 추가)을 선택하고 다음 옵션을 선택합니다.

[Step type]에서 [Custom JAR]를 선택합니다.
이름에 S3DistCp 단계의 이름을 입력합니다.
JAR location(JAR 위치)command-runner.jar을 입력합니다. 자세한 내용은 Command Runner를 참조하세요.
[인수(Arguments)]에는 s3-dist-cp --src=s3://s3distcp-source/input-data --dest=hdfs:///output-folder1과 유사한 옵션을 입력합니다.
[Action on failure(실패 시 작업)]로 [계속(Continue)]을 선택합니다.

4.    [추가]를 선택합니다.

5.    단계 [상태(Status )]가 [완료됨(Completed)]으로 바뀌면 파일이 클러스터로 복사되었는지 확인합니다.

$ hadoop fs -ls hdfs:///output-folder1/

참고: groupBy 옵션을 사용하여 작은 파일을 큰 파일 몇 개로 압축한 다음 outputCodec 옵션으로​큰 파일을 압축​하는 것이 좋습니다.

문제 해결

S3DistCp와 관련된 문제를 해결하려면 해당 단계 및 태스크 로그를 점검하세요.

단계 로그:

1.    Amazon EMR 콘솔을 열고 [클러스터(Clusters)]를 선택합니다.

2.    목록에서 Amazon EMR 클러스터를 선택한 다음 [단계(Steps)]를 선택합니다.

3.    로그 파일 열에서 해당하는 단계 로그를 선택합니다.

controller: 단계 처리에 대한 정보입니다. 단계를 로드하는 동안 장애가 발생하면 이 로그에서 스택 트레이스를 볼 수 있습니다.
syslog: 해당 단계의 하둡 작업 실행을 설명합니다.
stderr
: 하둡이 단계를 처리하는 동안의 표준 오류 채널입니다.
stdout
: 하둡이 단계를 처리하는 동안의 표준 출력 채널입니다.

단계 로그에서 결함의 근본 원인을 찾을 수 없는 경우, S3DistCp 태스크 로그를 확인하세요.

1.    Amazon EMR 콘솔을 열고 [클러스터(Clusters)]를 선택합니다.

2.    목록에서 Amazon EMR 클러스터를 선택한 다음 [단계(Steps)]를 선택합니다.

3.    [로그 파일(Log files)] 열에서 [작업 보기(View jobs)]를 선택합니다.

4.    작업 열에서 작업 보기를 선택합니다.

5.    실패한 태스크가 있으면 [시도 보기(View attempts)]를 선택하여 작업 로그를 확인합니다.

일반 오류

메모리 부족으로 인한 Reducer 태스크 실패:

해당 단계의 stderr 로그에 다음과 비슷한 오류 메시지가 있는 경우, reducer 태스크를 처리할 메모리가 부족하여 S3DistCp 작업이 실패한 것입니다.

Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Container [pid=19135,containerID=container_1494287247949_0005_01_000003] is running beyond virtual memory limits. Current usage: 569.0 MB of 1.4 GB physical memory used; 3.0 GB of 3.0 GB virtual memory used. Killing container.

이 문제를 해결하려면 다음 옵션 중 하나를 사용하여 reducer 태스크의 메모리 리소스를 늘리세요.

Amazon S3 권한 오류:

해당 단계의 stderr 로그에 다음과 비슷한 오류 메시지가 있는 경우, 권한 문제로 인해 S3DistCp 태스크가 Amazon S3에 액세스하지 못하는 것입니다.

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: REQUEST_ID

이 문제를 해결하는 방법은 권한 오류를 참조하세요.


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


결제 또는 기술 지원이 필요합니까?