Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Amazon EMR 클러스터의 Spark 드라이버 로그에 액세스하려면 어떻게 해야 합니까?
Amazon EMR 클러스터의 Apache Spark 드라이버 로그에 액세스하여 Spark 애플리케이션 문제를 해결하려고 합니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
Amazon EMR에서 Spark는 YARN 애플리케이션으로 실행되며 클라이언트 및 클러스터 배포 모드를 지원합니다.
클라이언트 모드 작업
클라이언트 모드는 기본 배포 모드입니다. 클라이언트 모드에서 Spark 드라이버는 spark-submit 명령이 실행되는 호스트에서 실행됩니다. 프라이머리 노드에서 --deploy-mode client와 함께 spark-submit 명령을 실행하면 터미널 창에 드라이버 로그가 표시됩니다. Amazon EMR은 기본적으로 이러한 로그를 보관하지 않습니다. 로그를 캡처하려면 spark-submit 명령의 출력을 파일에 저장하십시오.
명령 예시:
spark-submit [--deploy-mode client] ... 1>output.log 2>error.log
Amazon EMR 단계를 사용하여 Spark 애플리케이션을 제출하면 Amazon EMR이 Amazon Simple Storage Service(Amazon S3)의 stderr.gz 파일에 드라이버 로그를 보관합니다. 파일 경로는 다음과 유사합니다.
s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/stderr.gz
자세한 내용은 Amazon S3에 보관된 로그 파일 보기를 참조하십시오.
Spark 드라이버 로그에 액세스하려면 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 단계 로그를 다운로드한 다음, 경고와 오류를 검색합니다.
다음 단계를 완료하십시오.
-
다음 sync 명령을 실행하여 단계 로그를 다운로드합니다.
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/ s-2M809TD67U2IA/
-
다음 명령을 실행하여 단계 로그 폴더를 엽니다.
cd s-2M809TD67U2IA/
-
다음 명령을 실행하여 로그 파일의 압축을 풉니다.
find . -type f -exec gunzip filename\;
참고: filename을 사용자 파일의 이름으로 바꾸십시오.
-
다음 명령을 실행하여 클러스터 모드 로그에서 YARN 애플리케이션 ID를 가져옵니다.
grep "Client: Application report for" * | tail -n 1
-
다음 명령을 실행하여 클라이언트 모드 로그에서 오류와 경고를 찾습니다.
egrep "WARN|ERROR" *
JupyterHub, Apache Livy 또는 Apache Zeppelin 등과 같은 애플리케이션을 클라이언트로 사용하여 Spark 애플리케이션을 클러스터에 제출할 수도 있습니다. 애플리케이션은 프라이머리 노드의 /mnt/var/log/ 폴더에 애플리케이션의 로그에 있는 드라이버 로그를 저장합니다.
또한 s3://awsexamplebucket/JOBFLOW_ID/node/MASTER_ID/applications/ Amazon S3 경로에서도 압축된 로그를 찾을 수 있습니다.
Zeppelin을 사용하는 경우 /mnt/var/log/zeppelin/zeppelin-interpreter-spark-##########.log에서 Spark 드라이버 로그를 찾을 수 있습니다.
Jupyter의 경우 /mnt/var/log/livy/livy-livy-server.out Livy 로그에서 드라이버 로그를 찾을 수 있습니다.
클러스터 모드 작업
Spark 애플리케이션을 클러스터 모드에서 제출하면 드라이버 프로세스가 애플리케이션 기본 컨테이너에서 실행됩니다. 애플리케이션 기본 컨테이너는 Spark 애플리케이션이 실행될 때 실행되는 첫 번째 컨테이너입니다. 클라이언트는 YARN 애플리케이션 보고서를 기록합니다.
드라이버 로그를 가져오려면 다음 단계를 완료하십시오.
-
클라이언트 로그에서 애플리케이션 ID를 가져옵니다.
application_1572839353552_0008 애플리케이션 ID가 포함된 예제 출력:19/11/04 05:24:42 INFO Client: Application report for application_1572839353552_0008 (state: ACCEPTED)
-
애플리케이션 기본 컨테이너 로그를 식별합니다.
Spark 애플리케이션 로그의 예제 목록:`s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stderr.gz` `s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stdout.gz` `s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000002/stderr.gz` `s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000002/stdout.gz`
참고: 목록의 첫 번째 컨테이너는 항상 기본 컨테이너입니다. 위 목록에서 기본 컨테이너는 container_1572839353552_0008_01_000001입니다.
-
다음 sync 명령을 실행하여 애플리케이션 기본 컨테이너 로그를 인스턴스에 다운로드합니다.
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/ application_1572839353552_0008/
-
다음 명령을 실행하여 Spark 애플리케이션 로그 폴더를 엽니다.
cd application_1572839353552_0008/
-
다음 명령을 실행하여 로그 파일의 압축을 풉니다.
find . -type f -exec gunzip {} \;
-
다음 명령을 실행하여 모든 컨테이너 로그에서 오류 및 경고를 검색합니다.
egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"
-
다음 명령을 실행하여 애플리케이션 기본 컨테이너가 실행된 노드의 주소를 가져옵니다. 실행 중인 클러스터에서 YARN CLI를 사용하여 YARN 애플리케이션 컨테이너 로그를 가져올 수 있습니다.
yarn logs -applicationId application_1585844683621_0001 | grep 'Container: container_1585844683621_0001_01_000001'
예상 출력:
20/04/02 19:15:09 INFO client.RMProxy: Connecting to ResourceManager at ip-###-##-##-##.us-west-2.compute.internal/###.##.##.##:8032 Container: container_1585844683621_0001_01_000001 on ip-###-##-##-##.us-west-2.compute.internal_8041
-
클러스터 모드에서 제출하는 Spark 애플리케이션의 경우 다음 명령을 실행하여 애플리케이션 기본 컨테이너 로그를 가져옵니다.
yarn logs -applicationId application_1585844683621_0001 -containerId container_1585844683621_0001_01_000001 -nodeAddress ip-###-##-##-##.us-west-2.compute.internal
참고: applicationId를 애플리케이션 ID로, containerId를 컨테이너 ID로, nodeAddress ip를 노드 주소로 바꾸십시오.
관련 정보

관련 콘텐츠
- 질문됨 한 달 전lg...
- 질문됨 2년 전lg...
- 질문됨 2년 전lg...