Amazon EMR 작업 중 클러스터 입력 및 출력 오류 - Amazon EMR

Amazon EMR 작업 중 클러스터 입력 및 출력 오류

다음 오류는 클러스터 입력 및 출력 작업에서 일반적으로 발생합니다. 이 주제의 지침을 사용하여 구성 문제를 해결하고 구성을 확인합니다.

Amazon Simple Storage Service(Amazon S3)에 대한 경로에 3개 이상의 슬래시가 있나요?

Amazon S3 버킷을 지정할 때 URL 끝에 후행 슬래시를 포함해야 합니다. 예를 들어 버킷을 "s3n://amzn-s3-demo-bucket"로 참조하는 대신에, "s3n://amzn-s3-demo-bucket/"을 사용해야 합니다. 그렇지 않으면 대부분의 경우 Hadoop에서 클러스터가 실패합니다.

입력 디렉터리를 재귀적으로 통과하려고 합니까?

하둡에서는 입력 디렉터리를 재귀적으로 검색하여 파일을 찾을 수 없습니다. /corpus/01/01.txt, /corpus/01/02.txt, /corpus/02/01.txt 등의 디렉터리 구조가 있으며 /corpus/를 클러스터의 입력 파라미터로 지정하는 경우, /corpus/ 디렉터리가 비어 있고 Hadoop에서는 하위 디렉터리의 콘텐츠가 확인되지 않으므로 어떠한 입력 파일도 찾을 수 없습니다. 마찬가지로, Hadoop에서는 Amazon S3 버킷의 하위 디렉터리를 재귀적으로 확인하지 않습니다.

입력 파일을 하위 디렉터리가 아니라 입력 디렉터리 또는 지정하는 Amazon S3 버킷 자체에 들어 있어야 합니다.

출력 디렉터리가 이미 있습니까?

이미 존재하는 출력 경로를 지정하는 경우 대부분의 경우 하둡에서 클러스터가 실패합니다. 즉, 클러스터를 일회성으로 실행하고 나서 동일한 파라미터를 사용하여 해당 클러스터를 다시 실행하는 경우 처음에는 작동하지만 그 이후에는 작동하지 않을 것입니다. 첫 번째 실행 후 출력 경로가 존재하므로 모든 이후 실행이 실패합니다.

HTTP URL을 사용하여 리소스를 지정하려고 합니까?

하둡에서는 http:// 접두사를 사용하여 지정한 리소스 위치를 허용하지 않습니다. HTTP URL을 사용하여 리소스를 참조할 수 없습니다. 예를 들어 http://mysite/myjar.jar를 JAR 파라미터로 전달하면 클러스터가 실패합니다.

잘못된 이름 형식을 사용하여 Amazon S3 버킷을 참조하고 있나요?

"amzn-s3-demo-bucket1.1"과 같은 버킷 이름을 Amazon EMR에서 사용하려는 경우 Amazon EMR에서는 버킷 이름이 유효한 RFC 2396 호스트 이름이어야 하므로 클러스터에 실패합니다. 이름은 숫자로 끝날 수 없습니다. 또한, Hadoop 요구 사항으로 인해 Amazon EMR에 사용되는 Amazon S3 버킷 이름에는 소문자, 숫자, 마침표(.) 및 하이픈(-)만 포함되어야 합니다. Amazon S3 버킷 이름 형식 지정 방법에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 버킷 규제 및 제한을 참조하세요.

Amazon S3에서 또는 Amazon S3로 데이터를 로드하는 데 문제가 있나요?

Amazon S3는 가장 널리 사용되는 Amazon EMR의 입출력 소스입니다. 흔하게 하는 실수 중 하나는 Amazon S3를 일반적인 파일 시스템처럼 다루는 것입니다. 클러스터 실행 시 파일 시스템과 Amazon S3 간의 차이를 고려해야 합니다.

  • Amazon S3에서 내부 오류가 발생하는 경우 애플리케이션은 이를 적절하게 처리하고 해당 작업을 다시 시도해야 합니다.

  • Amazon S3의 직접호출에 따른 결과가 반환되는 데 너무 오래 걸리는 경우 애플리케이션에서 Amazon S3를 직접 호출하는 빈도를 줄여야 할 수도 있습니다.

  • Amazon S3 버킷 내 모든 객체를 나열하는 작업은 상당한 비용이 드는 직접 호출입니다. 애플리케이션에서 이 작업을 수행하는 횟수를 최소화해야 합니다.

클러스터와 Amazon S3 간의 상호 작용 방식을 개선할 수 있는 몇 가지 방법이 있습니다.

  • Amazon EMR의 최신 릴리스 버전을 사용하여 클러스터를 시작합니다.

  • S3DistCp를 사용하여 Amazon S3 내부 및 외부로 객체를 이동합니다. S3DistCp는 오류 처리를 구현하고 Amazon S3의 요구 사항에 맞게 재시도 및 백오프합니다. 자세한 내용은 S3DistCp를 사용한 분산 복사를 참조하세요.

  • 최종 일관성을 염두에 두고 애플리케이션을 설계합니다. 클러스터를 실행 중인 동안 중간 데이터 스토리지용으로 HDFS를 사용하고 Amazon S3는 초기 데이터를 입력하고 최종 결과를 출력하는 용도로만 사용합니다.

  • 클러스터에서 초당 200개 이상의 트랜잭션을 Amazon S3로 커밋하는 경우 지원 센터에 문의하여 초당 대량 트랜잭션을 처리할 수 있도록 버킷을 준비하고 Amazon S3 성능 팁 및 요령에 설명된 주요 파티션 전략을 사용하는 방안을 고려합니다.

  • 하둡 구성 설정 io.file.buffer.size를 65536로 설정합니다. 이렇게 하면 Hadoop에서 Amazon S3 객체를 탐색하는 데 드는 시간이 단축됩니다.

  • 클러스터에서 Amazon S3 동시성 문제가 발생하는 경우 Hadoop의 추론적 실행 기능을 비활성화하는 것을 고려합니다. 이 기능은 느린 클러스터 문제를 해결할 때도 유용합니다. mapreduce.map.speculativemapreduce.reduce.speculative 속성을 false로 설정하여 이 작업을 수행할 수 있습니다. 클러스터를 시작할 때 mapred-env 구성 분류를 사용하여 이러한 값을 설정할 수 있습니다. 자세한 내용을 알아보려면 Amazon EMR Release Guide(Amazon EMR 릴리스 안내서)의 Configuring Applications(애플리케이션 구성)를 참조하세요.

  • Hive 클러스터를 실행 중인 경우 Amazon S3와 Hive 간에 데이터를 로드하는 데 문제가 있나요? 단원을 참조하십시오.

자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 Amazon S3 오류 모범 사례를 참조하세요.