내용으로 건너뛰기

Amazon EMR에서 실패한 Spark 작업 문제를 해결하려면 어떻게 해야 하나요?

4분 분량
0

Amazon EMR에서 실패한 Apache Spark 작업 문제를 해결하고 싶습니다.

간략한 설명

Amazon Elastic Compute Cloud(Amazon EC2) 기반 Amazon EMR에서 실패한 Spark 작업 문제를 해결하려면 다음 단계를 완료하세요.

  • --deploy-mode-client와 함께 제출된 Spark 작업의 경우, 단계 로그를 확인하여 단계 실패의 근본 원인을 식별하세요.
  • --deploy-mode-cluster와 함께 제출된 Spark 작업의 경우, 먼저 단계 로그를 확인하여 애플리케이션 ID를 식별하세요. 그런 다음 애플리케이션 마스터 로그를 확인하여 단계 실패의 근본 원인을 식별합니다.

Amazon Elastic Kubernetes Service(Amazon EKS)에서 Amazon EMR에서 실패한 Spark 작업 문제를 해결하려면 Spark 작업 실패의 근본 원인을 파악하세요. 이를 위해서는 Amazon Simple Storage Service(Amazon S3) 또는 Amazon CloudWatch에서 드라이버 로그를 확인하세요.

Amazon EMR Serverless에서 실패한 Spark 작업 문제를 해결하려면 Spark 작업 실패의 근본 원인을 식별하세요. 이를 위해서는 Amazon EMR Serverless 애플리케이션 콘솔 및 드라이버 로그에서 작업 실행 세부 정보를 확인하세요.

해결 방법

Amazon EC2의 Amazon EMR에서 실패한 Spark 작업 문제 해결

클라이언트 모드 작업
Spark 작업이 클라이언트 모드로 배포되면 단계 로그는 작업 파라미터와 단계 오류 메시지를 제공합니다. 이러한 로그는 Amazon S3에 보관됩니다.

단계 실패의 근본 원인을 확인하려면 단계 로그를 Amazon EC2 인스턴스에 다운로드하세요. 그런 다음 경고와 오류를 검색합니다. 다음 단계를 완료하세요.

단계 로그 파일의 압축을 풀려면 다음 명령을 실행합니다.

find . -type f -exec gunzip {} \;

클러스터 모드 로그에서 YARN 애플리케이션 ID를 식별하려면 다음 명령을 실행합니다.

grep "Client: Application report for" * | tail -n 1

다음 예제 파일은 메모리 문제를 나타냅니다.

"ERROR SparkContext: Error initializing SparkContext.java.lang.IllegalArgumentException: Executor memory 134217728 must be at least 471859200. Please increase executor memory using the --executor-memory option or spark.executor.memory in Spark configuration."

위 오류를 해결하려면 spark-submit 명령을 실행하여 메모리가 늘어난 작업을 제출하세요. 자세한 내용을 알아보려면 Apache Spark 웹사이트에서 애플리케이션 제출을 참조하세요.
예시:

spark-submit --deploy-mode client --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar

클러스터 모드 작업
실패한 Spark 단계와 관련된 애플리케이션 ID를 식별하려면 stderr 단계 로그를 확인하세요. 단계 로그는 Amazon S3에 보관됩니다. 그런 다음 애플리케이션 기본 로그를 식별합니다. 클러스터 모드에서 실행되는 Spark 작업은 애플리케이션 기본 로그에서 실행됩니다. 애플리케이션 기본 로그는 Spark 작업이 시작될 때 실행되는 첫 번째 컨테이너입니다. 다음 예제에서 container_1572839353552_0008_01_000001은 애플리케이션 기본 로그의 첫 번째 컨테이너입니다.

예시:
s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stderr.gz

애플리케이션 기본 로그를 식별한 후 Amazon EC2 인스턴스에 로그를 다운로드합니다. 그런 다음 경고와 오류를 검색합니다.

단계 로그 파일의 압축을 풀려면 다음 명령을 실행합니다.

find . -type f -exec gunzip {} \;

컨테이너 로그에서 경고와 오류를 검색하려면 다음 명령의 출력에 있는 컨테이너 로그를 여세요.

egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"

컨테이너 로그에 메모리 문제가 있는 경우, 다음 spark-submit 명령을 실행하여 메모리가 늘어난 작업을 제출하세요.

spark-submit --deploy-mode cluster --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 1000

Amazon EKS의 Amazon EMR에서 실패한 Spark 작업 문제 해결

참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

Spark 작업이 Amazon EKS의 Amazon EMR에 제출되면 Amazon S3 또는 CloudWatch에 로그를 저장할 수 있습니다. 드라이버 로그에서 실패한 Spark 작업을 확인해야 합니다. 또한, 실행 중인 Spark 작업의 드라이버실행기 로그와 관련된 자세한 정보를 얻으려면 kubectl 명령을 사용하세요.

참고: Kubectl 명령은는 활성 포드에서만 동작합니다. 포드가 중지되면 kubectl 명령을 실행할 수 없습니다.

start-job-run 명령을 사용하여 Spark 작업을 제출하는 경우 다음 kubectl 명령을 사용하세요.

kubectl get pods -n example-spark-namespace

참고: example-spark-namespace를 작업을 시작하는 데 사용되는 Spark 네임스페이스로 바꿉니다.

kubectl logs spark-example-pod-driver -n example-spark-namespace -c spark-kubernetes-driver

참고: example-spark-namespace를 작업을 시작하는 데 사용되는 Spark 네임스페이스로 바꾸고 example-pod를 포드 이름으로 바꿉니다.

spark-operator 명령을 사용하여 Spark 작업을 제출하는 경우, 다음 kubectl 명령을 사용합니다.

kubectl get pods -n example-spark-namespace

참고: example-spark-namespace를 작업을 시작하는 데 사용되는 Spark 네임스페이스로 바꿉니다.

kubectl logs example-pod-driver -n example-spark-namespace

참고: example-pod를 포드 이름으로 바꾸고 example-spark-namespace를 작업을 시작하는 데 사용되는 Spark 네임스페이스로 바꿉니다.

spark-submit 명령으로 Spark 작업을 제출하는 경우, 다음 kubectl 명령을 사용합니다. 자세한 내용을 알아보려면 Apache Spark 웹사이트에서 애플리케이션 제출을 참조하세요.

kubectl get pods -n example-spark-namespace

참고: example-spark-namespace를 작업을 시작하는 데 사용되는 Spark 네임스페이스로 바꿉니다.

kubectl logs example-pod-driver -n example-spark-namespace

참고: example-spark-namespace를 작업을 시작하는 데 사용되는 Spark 네임스페이스로 바꾸고 example-pod를 포드 이름으로 바꿉니다.

Amazon EMR Serverless 실패 Spark 작업 문제 해결

Amazon EMR Serverless에서 Spark 작업을 제출하면 기본적으로 모든 작업 실행에 대해 로깅이 활성화됩니다. 또한 Amazon S3 버킷에 대해 Amazon S3 로깅을 활성화할 수 있습니다. 실패한 Spark 작업 문제를 해결하려면 작업 실행 세부 정보를 확인한 다음 드라이버 로그 파일 옵션을 선택합니다. 또한 CloudWatch에 저장된 로그를 확인하여 실패한 Spark 작업의 근본 원인을 파악할 수 있습니다.

관련 정보

Spark 단계 추가

EKS에서 Amazon EMR을 사용하여 작업 실행

로깅 및 모니터링

AWS 공식업데이트됨 2년 전