

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

# 아키텍처
<a name="architecture"></a>

다음 다이어그램은이 가이드에 설명된 솔루션의 아키텍처를 보여줍니다. AWS Glue 작업은 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스인 [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 버킷에서 데이터를 읽습니다. AWS Management Console, [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 또는 AWS Glue API를 통해 작업을 시작할 AWS Glue Spark SQL 수 있습니다. 작업은 AWS Glue Spark SQL Amazon S3 버킷의 원시 데이터를 처리한 다음 처리된 데이터를 다른 버킷에 저장합니다.



![AWS Glue Amazon S3 버킷에서 원시 데이터 Spark SQL 처리](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/spark-tuning-glue-emr/images/aws-glue-processing-S3-data.png)


예를 들어이 가이드에서는 Python 및 Spark SQL ()로 작성된 기본 [AWS GlueSpark SQL 작업을](https://docs.aws.amazon.com/glue/latest/dg/etl-jobs-section.html) 설명합니다PySpark. 이 AWS Glue 작업은 Spark SQL 튜닝 모범 사례를 보여주는 데 사용됩니다. 이 가이드는에 중점을 두고 있지만이 가이드 AWS Glue의 모범 사례는 [Amazon EMR Spark SQL 작업에](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/jobs-spark.html)도 적용됩니다.

다음 다이어그램은 Spark SQL 쿼리의 수명 주기를 보여줍니다. Spark SQL Catalyst Optimizer는 쿼리 계획을 생성합니다. *쿼리 계획*은 SQL 관계형 데이터베이스 시스템의 데이터에 액세스하는 데 사용되는 지침과 같은 일련의 단계입니다. 성능 최적화 Spark SQL 쿼리 계획을 개발하려면 첫 번째 단계는 `EXPLAIN` 계획을 보고 계획을 해석한 다음 계획을 조정하는 것입니다. Spark SQL 사용자 인터페이스(UI) 또는 Spark SQL 기록 서버를 사용하여 계획을 시각화할 수 있습니다.



![복원력이 뛰어난 분산 데이터 세트(RDD)를 생성하기 위한 Spark SQL 쿼리의 수명 주기](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/spark-tuning-glue-emr/images/spark-sql-query-lifecycle.png)


Spark Catalyst Optimizer는 다음과 같이 초기 쿼리 계획을 최적화된 쿼리 계획으로 변환합니다.

1. **분석 및 선언적 APIs **- 분석 단계는 첫 번째 단계입니다. SQL 쿼리에서 참조되는 객체를 알 수 없거나 입력 테이블과 일치하지 않는 *해결되지 않은 논리적 계획*은 무한 속성 및 데이터 유형으로 생성됩니다. 그런 다음 Spark SQL Catalyst Optimizer는 일련의 규칙을 적용하여 논리적 계획을 수립합니다. SQL 구문 분석기는 SQL 추상 구문 트리(AST)를 생성하고 이를 논리적 계획의 입력으로 제공할 수 있습니다. 입력은 API를 사용하여 구성된 데이터 프레임 또는 데이터 세트 객체일 수도 있습니다. 다음 표에는 SQL, 데이터 프레임 또는 데이터 세트를 사용해야 하는 시기가 나와 있습니다.  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/spark-tuning-glue-emr/architecture.html)

   입력 유형에 대한 자세한 내용은 다음을 검토하세요.
   + 데이터 세트 API는 **유형화된** 버전을 제공합니다. 이렇게 하면 사용자 정의 Lambda 함수에 대한 의존도가 높기 때문에 성능이 저하됩니다. RDD 또는 데이터 세트는 정적으로 입력됩니다. 예를 들어 RDD를 정의할 때 스키마 정의를 명시적으로 제공해야 합니다.
   + 데이터 프레임 API는 **입력되지 않은** 관계형 작업을 제공합니다. 데이터 프레임은 동적으로 입력됩니다. RDD와 마찬가지로 데이터 프레임을 정의할 때 스키마는 동일하게 유지됩니다. 데이터는 여전히 구조화되어 있습니다. 그러나이 정보는 런타임에서만 사용할 수 있습니다. 이렇게 하면 컴파일러가 SQL과 유사한 문을 작성하고 즉시 새 열을 정의할 수 있습니다. 예를 들어 모든 작업에 대해 새 클래스를 정의할 필요 없이 기존 데이터 프레임에 열을 추가할 수 있습니다.
   + Spark SQL 쿼리는 런타임 중에 구문 및 분석 오류에 대해 평가되므로 런타임이 더 빨라집니다.

1. **카탈로그** -** **Spark SQL Apache Hive Metastore (HMS)를 사용하여 데이터베이스, 테이블, 열 및 파티션과 같은 영구 관계형 엔터티의 메타데이터를 관리합니다.

1. **최적화** ** **- 최적화 프로그램은 휴리스틱과 비용을 사용하여 쿼리 계획을 다시 작성합니다. 최적화된 논리적 계획을 생성하기 위해 다음을 수행합니다.

   1. 열을 정리합니다.

   1. 조건자를 푸시다운합니다.

   1. 조인 재정렬

1. **물리적 계획 및 플래너** - Spark SQL Catalyst Optimizer는 논리적 계획을 물리적 계획 세트로 변환합니다. 즉, *무엇을* *어떻게 변환하는지를 변환합니다.*

1. **선택한 물리적 계획 ""** - Spark SQL Catalyst Optimizer는 가장 비용 효율적인 물리적 계획을 선택합니다.

1. **최적화된 쿼리 계획** - 성능 최적화 및 비용 최적화 쿼리 계획을 Spark SQL 실행합니다. Spark SQL 메모리 관리는 메모리 사용량을 추적하고 작업과 연산자 간에 메모리를 분산합니다. Spark SQL Tungsten 엔진은 Spark SQL 애플리케이션의 메모리 및 CPU 효율성을 크게 개선할 수 있습니다. 또한 이진 데이터 모델 처리를 구현하고 이진 데이터에서 직접 작동합니다. 이렇게 하면 역직렬화의 필요성을 우회하고 데이터 변환 및 역직렬화와 관련된 오버헤드를 크게 줄일 수 있습니다.