AWS Glue ETL 작업에 대한 Spark UI를 볼 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 5월 21일

AWS Glue ETL 작업에 대한 Apache Spark UI를 볼 수 없는 이유는 무엇입니까?

해결 방법

AWS CloudFormation 스택 또는 Docker를 사용하여 Spark UI에 액세스하는 방법에 따라 다음 솔루션 중 하나를 선택합니다.

AWS CloudFormation 스택

Spark UI를 보기 위해 AWS CloudFormation 스택을 사용하는 경우 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 HTTPS 요청을 생성하여 Spark UI 작동 여부를 확인합니다. 요청이 실패하면 “WaitCondition timed out. Received 0 conditions when expect 1,(WaitCondition 시간 초과. 1이 필요할 때 0 조건을 수신했습니다.)” 오류가 발생하고 AWS CloudFormation 스택이 롤백됩니다.

이 문제를 해결하려면 다음을 확인하십시오.

  • 서브넷: 서브넷이 Amazon Simple Storage Service(Amazon S3) API 엔드포인트에 도달할 수 있는지 확인합니다. 예를 들어 프라이빗 서브넷을 사용하는 경우 서브넷에 VPC 엔드포인트 또는 NAT 게이트웨이가 있는지 확인합니다.
  • 기록 서버 포트: Spark 기록 서버 포트를 통해 서브넷에 액세스할 수 있는지 확인합니다. 예를 들어 방화벽이 포트를 차단할 수 있습니다.
  • 이벤트 로그 디렉터리: 이벤트 로그 디렉터리에 유효한 Amazon S3 경로를 입력했는지 확인합니다. 이벤트 로그 경로 체계에 s3a://를 사용해야 합니다. 지정한 Amazon S3 경로에 이벤트 로그 파일이 있으면 경로가 유효한 것입니다.

그래도 오류가 발생하면 Amazon CloudWatch Logs에서 다음 로그 그룹을 확인하십시오.

  • /aws-glue/sparkui_cfn/cfn-init.log
  • /aws-glue/sparkui_cfn/spark_history_server.log

참고: CloudFormation 스택이 롤백되면 기록 서버 EC2 인스턴스가 종료됩니다. 인스턴스가 종료되지 않도록 하려면 스택에 대한 종료 방지 기능을 활성화하십시오.

Docker

Spark UI를 보기 위해 Docker를 사용하고 있는 데 웹 브라우저에서 Spark 기록 서버에 연결할 수 없는 경우 다음을 확인하십시오.

  • AWS 자격 증명(액세스 키 및 보안 키)이 유효한지 확인합니다. 임시 자격 증명을 사용하려면 명령에 spark.hadoop.fs.s3a.session.token을 사용해야 합니다. 예:
$ docker run -itd -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \
-Dspark.history.fs.logDirectory=s3a://path_to_eventlog \
-Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID
-Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY \
-Dspark.hadoop.fs.s3a.session.token=SESSION_TOKEN \
-Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
-p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"
  • 이벤트 로그 디렉터리에 유효한 Amazon S3 경로를 입력했는지 확인합니다. 이벤트 로그 경로 체계에 s3a://를 사용해야 합니다. 지정한 Amazon S3 경로에 이벤트 로그 파일이 있으면 경로가 유효한 것입니다.
  • 브라우저에 올바른 포트 번호를 입력했는지 확인합니다. 기본적으로 포트 번호는 18080입니다(예: http://localhost:18080). 포트 번호를 변경하려면 명령에서 -p 파라미터를 변경하고 Dockerfile에서 spark.history.ui.port 파라미터를 변경합니다.

그래도 Spark UI를 볼 수 없는 경우 로그를 확인하십시오. Docker 컨테이너에 대한 stdout 및 stderr 로그를 가져오려면 -itd 파라미터 대신 -it 파라미터와 함께 docker run을 실행합니다. 예:

$ docker run -it -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \
-Dspark.history.fs.logDirectory=s3a://path_to_eventlog \
-Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID
-Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY \
-Dspark.hadoop.fs.s3a.session.token=SESSION_TOKEN \
-Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
-p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"