AWS CloudFormation 템플릿 또는 Docker를 로컬에서 사용할 때 AWS Glue ETL 작업의 Apache Spark UI가 표시되지 않습니다.
해결 방법
Spark UI에 액세스하는 방법에 따라 다음 해결 단계를 수행하십시오.
CloudFormation 스택
CloudFormation 스택을 사용하여 Spark UI를 볼 때 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 HTTPS 요청을 보냅니다. 이 요청은 Spark UI의 작동 여부를 확인합니다. 요청이 실패하면 다음과 같은 오류가 발생합니다.
"WaitCondition timed out. Received 0 conditions when expecting 1,"
이 오류가 발생하면 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
Docker를 사용하여 Spark UI를 볼 때 브라우저에서 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"
참고: AWS_ACCESS_KEY_ID를 키 ID로, AWS_SECRET_ACCESS_KEY를 시크릿 액세스 키로, SESSION_TOKEN을 세션 토큰으로 바꾸십시오.
-
이벤트 로그 디렉터리에 유효한 Amazon S3 경로를 입력했는지 확인합니다. 이벤트 로그 경로 체계에는 **s3a://**를 사용해야 합니다.
참고: 지정한 Amazon S3 경로에 이벤트 로그 파일이 있는 경우 경로가 유효한 것입니다.
-
브라우저에 올바른 포트 번호를 입력했는지 확인합니다. 포트 번호를 변경하려면 docker run 명령에서 -p 파라미터를 변경하고 Docker 파일에서 spark.history.ui.port 파라미터를 변경하십시오.
참고: 기본적으로 포트 번호는 18080입니다. 포트 예시: http://localhost:18080.
여전히 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"
참고: AWS_ACCESS_KEY_ID를 키 ID로, AWS_SECRET_ACCESS_KEY를 시크릿 액세스 키로, SESSION_TOKEN을 세션 토큰으로 바꾸십시오.
관련 정보
Apache Spark 웹 UI를 사용하여 작업 모니터링
AWS Glue 작업을 위한 Apache Spark 웹 UI 활성화