Apache Spark 웹 UI를 사용하여 작업 모니터링 - AWS Glue

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Apache Spark 웹 UI를 사용하여 작업 모니터링

Apache Spark 웹 UI를 사용하여 AWS Glue 작업 시스템에서 실행 중인 AWS Glue ETL 작업과 AWS Glue 개발 엔드포인트에서 실행 중인 Spark 애플리케이션을 모니터링하고 디버그할 수 있습니다. Spark UI를 사용하면 각 작업에 대해 다음을 확인할 수 있습니다.

  • 각 Spark 단계의 이벤트 타임라인

  • 작업의 방향성 비순환 그래프(DAG)

  • SparkSQL 쿼리에 대한 물리적, 논리적 계획

  • 각 작업에 대한 기본 Spark 환경 변수

Spark 웹 UI 사용에 대한 자세한 내용은 Spark 설명서의 웹 UI를 참조하십시오. Spark UI 결과를 해석하여 작업 성능을 개선하는 방법에 대한 지침은 AWS 권장 가이드의 Apache Spark 용 AWS Glue 작업 성능 조정 모범 사례를 참조하세요.

새로운 작업의 경우 AWS Glue 콘솔에서 Spark UI를 볼 수 있습니다. 이 기능은 AWS Glue 작업이 AWS Glue 3.0 이상 버전에서 실행되고 새로운 작업의 기본값인 레거시 형식이 아닌 표준 형식으로 생성된 로그가 있는 경우 사용할 수 있습니다. 콘솔에서 Spark UI를 찾는 방법에 대한 자세한 내용은 최근 작업 실행에 대한 정보 보기를 참조하십시오. 다른 버전의 AWS Glue의 경우 자체 기록 서버를 프로비저닝합니다. 자세한 설명은 Spark 기록 서버 시작 섹션을 참조하세요.

AWS Glue 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 Spark UI를 활성화할 수 있습니다. Spark UI를 사용하면 AWS Glue 개발 엔드포인트의 AWS Glue ETL 작업과 Spark 애플리케이션은 Amazon Simple Storage Service(Amazon S3)에서 지정한 위치에 Spark 이벤트 로그를 백업할 수 있습니다. 작업이 작동 중일 때와 완료된 후 모두 실시간으로 Amazon S3에서 Spark UI를 통해 백업된 이벤트 로그를 사용할 수 있습니다. 로그가 Amazon S3에 남아 있는 동안 AWS Glue 콘솔의 Spark UI에서 해당 로그를 볼 수 있습니다.

콘솔에서 Spark UI를 사용하려면 AWS Glue 콘솔 역할에 glue:UseGlueStudio 권한이 있어야 합니다. 권한에 대한 자세한 내용은 AWS Glue Studio에 대한 사용자 지정 IAM 정책 생성 단원을 참조하십시오.

제한:

  • AWS Glue 콘솔의 Spark UI는 레거시 로그 형식이므로 2023년 11월 20일 이전에 발생한 작업 실행에는 사용할 수 없습니다.

  • AWS Glue 콘솔의 Spark UI는 스트리밍 작업에서 기본적으로 생성되는 것과 같은 롤링 로그를 지원하지 않습니다.

    추가 구성을 전달하여 스트리밍 작업에 대한 롤링 로그를 끌 수 있습니다. 로그 파일이 매우 크면 유지 관리 비용이 많이 들 수 있습니다.

    롤링 로그를 끄려면 다음 구성을 제공하십시오.

    '--spark-ui-event-logs-path': 'true', '--conf': 'spark.eventLog.rolling.enabled=false'

예: Apache Spark 웹 UI

이 예제에서는 Spark UI를 사용하여 작업 성과를 이해하는 방법을 보여줍니다. 스크린샷은 자체 관리형 Spark 기록 서버에서 제공하는 Spark 웹 UI를 보여줍니다. AWS Glue 콘솔의 Spark UI에서도 비슷한 화면을 볼 수 있습니다. Spark 웹 UI 사용에 대한 자세한 내용은 Spark 설명서의 웹 UI를 참조하십시오.

다음은 Spark 애플리케이션에서 두 데이터 소스의 데이터를 읽고 조인 변환을 수행하여 Parquet 형식으로 Amazon S3에 쓰는 예제입니다.

import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from pyspark.sql.functions import count, when, expr, col, sum, isnull from pyspark.sql.functions import countDistinct from awsglue.dynamicframe import DynamicFrame args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME']) df_persons = spark.read.json("s3://awsglue-datasets/examples/us-legislators/all/persons.json") df_memberships = spark.read.json("s3://awsglue-datasets/examples/us-legislators/all/memberships.json") df_joined = df_persons.join(df_memberships, df_persons.id == df_memberships.person_id, 'fullouter') df_joined.write.parquet("s3://aws-glue-demo-sparkui/output/") job.commit()

다음 DAG 시각화는 이 Spark 작업의 여러 단계를 보여줍니다.


      작업 0의 완료된 2단계를 보여주는 Spark UI의 스크린샷.

작업에 대한 다음 이벤트 타임라인은 다양한 Spark 실행기의 시작, 실행 및 종료를 보여줍니다.


      다양 Spark 실행기의 완료, 실패 및 활성 단계를 보여주는 Spark UI의 스크린샷.

다음 화면은 SparkSQL 쿼리 계획의 세부 정보를 보여줍니다.

  • 구문 분석된 논리적 계획

  • 분석된 논리적 계획

  • 최적화된 논리적 계획

  • 실행할 물리적 계획


      SparkSQL 쿼리 계획 : 구문 분석, 분석 및 최적화된 논리적 계획과 실행할 물리적 계획.