Amazon Athena를 사용하여 Amazon EMR Spark 작업의 실패 문제를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2021년 3월 11일

Amazon EMR에서 Spark 작업이 실패했습니다. Amazon Athena를 사용하여 Spark 로그를 쿼리하여 실패 문제를 해결하고 싶습니다.

해결 방법

Amazon EMR 애플리케이션을 Amazon EMR에서 실행하면 로그 파일이 생성됩니다. EMR 로그 파일에 대한 기본 테이블을 생성한 후 Athena를 사용하여이 EMR 로그를 쿼리합니다. EMR 로그를 쿼리하여 애플리케이션 및 클러스터에 대한 이벤트와 추세를 식별할 수 있습니다.

다음과 유사한 명령을 실행하여 Amazon S3 로그 위치에 저장한 EMR 로그 파일을 기반으로 기본 테이블 myemrlogs를 생성합니다.

CREATE EXTERNAL TABLE `myemrlogs`(
  `data` string COMMENT 'from deserializer')
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://aws-logs-111122223333-us-west-2/elasticmapreduce/j-1ABCDEEXAMPLE/containers/application_1111222233334_5555/'

위의 쿼리를 다음과 같이 수정합니다.

  • myemrlogs를 테이블 이름으로 수정
  • 111122223333를 AWS 계정 번호로 수정
  • j-1ABCDEEXAMPLE를 클러스터 ID로 수정
  • us-west-2를 원하는 리전으로 수정
  • application_1111222233334_5555를 애플리케이션 ID로 수정

참고:예제에 언급된 S3 버킷은 Amazon EMR에서 사용하는 기본 버킷입니다. 로그 버킷 경로를 확인하려면Amazon EMR 콘솔을 선택하고, 클러스터를 선택한 다음 로그 URI 필드의 요약 탭을 클릭합니다.

그런 다음과 유사한 명령을 실행하여 myemrlogs에서 FAIL, ERROR, WARN, EXCEPTION, FATAL, 또는 CAUSE의 발생을 여부를 확인합니다.

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'FAIL|ERROR|WARN|EXCEPTION|FATAL|CAUSE') limit 100;

참고: myemrlogs를 EMR 로그 파일에서 생성한 테이블의 이름으로 수정합니다.

EMR 로그를 여러 가지 방법으로 쿼리하여 Spark 애플리케이션이 어느 단계에서 실패했는지 확인할 수 있습니다. 애플리케이션이 작업, 단계, 태스크 또는 실행기 수준에서 실패한 경우 다음과 같은 몇 가지 방법으로 로그를 쿼리하여 문제를 해결할 수 있습니다.

다음과 유사한 명령을 실행하여 애플리케이션의 종료 코드를 가져옵니다.

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'exitCode');

다음과 유사한 명령을 실행하여 Spark 실행기가 실행되고 있는 호스트를 확인합니다.

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'executor ID');

다음과 유사한 명령을 실행하여 스테이지별 태스크 매핑을 추적합니다.

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'TID');

다음과 유사한 명령을 실행하여 컨테이너의 힙 메모리 세부 정보를 확인합니다.

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'space');

다음과 유사한 명령을 실행하여 Directed Acyclic Graph(DAG) 스케줄러에서 각 작업/단계의 진행률을 추적합니다.

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'DAGScheduler');

Amazon EMR 로그를 기반으로 분할된 테이블을 생성한 다음 Athena를 사용하여 이러한 로그를 쿼리할 수도 있습니다. 자세한 내용은 Amazon EMR 로그를 기반으로 분할된 테이블 생성 및 쿼리를 참조하세요.


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


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