AWS Glue 개발 엔드포인트가 SageMaker 노트북과 함께 작동하는 방식 - AWS Glue

AWS Glue 개발 엔드포인트가 SageMaker 노트북과 함께 작동하는 방식

개발 엔드포인트에 액세스하는 보편적인 방법 중 하나로 SageMaker에서 Jupyter를 사용하는 방법이 있습니다. Jupyter Notebook은 오픈 소스 웹 애플리케이션의 일종으로 시각화, 분석, 기계 학습 등에 폭넓게 사용됩니다. AWS Glue SageMaker 노트북이 AWS Glue 개발 엔드포인트를 포함한 Jupyter Notebook 환경을 제공합니다. AWS Glue SageMaker 노트북에서 Jupyter Notebook 환경은 SparkMagic으로 사전 구성되어 있습니다. 이것은 오픈 소스 Jupyter 플러그인으로 Spark 작업을 원격 Spark 클러스터에 제출하는 역할을 합니다. Apache Livy는 REST API를 통해 원격 Spark 클러스터와 상호작용을 주고받게 해주는 서비스입니다. AWS Glue SageMaker 노트북에 SparkMagic이 구성되어 있어 AWS Glue 개발 엔드포인트에서 실행되는 Livy 서버에 대하여 REST API를 호출합니다.

다음 텍스트 흐름은 각각의 구성 요소의 작동 방식을 설명한 것입니다.

AWS Glue SageMaker 노트북: (Jupyter → SparkMagic) → (네트워크) → AWS Glue 개발 엔드포인트: (Apache Livy → Apache Spark)

Jupyter Notebook의 각 단락에 쓰인 Spark 스크립트를 실행하면 해당 Spark 코드를 SparkMagic을 통해 Livy 서버로 제출하고, 그런 다음 "livy-session-N"이라는 이름의 Spark 작업이 Spark 클러스터에서 실행됩니다. 이 작업을 Livy 세션이라고 합니다. 이 Spark 작업은 노트북 세션이 실행 중인 동안 실행됩니다. 노트북에서 Jupyter 커널을 종료하거나 세션이 시간 초과되면 해당 Spark 작업이 종료됩니다. 노트북(.ipnyb) 파일당 Spark 작업이 하나씩 실행됩니다.

여러 개의 SageMaker 노트북 인스턴스와 단 한 개의 AWS Glue 개발 엔드포인트만 사용할 수 있습니다. 각각의 SageMaker 노트북 인스턴스에 노트북 파일을 여러 개 생성할 수 있습니다. 각각의 노트북 파일을 열고 단락을 실행하면 SparkMagic을 통해 Spark 클러스터의 노트북 파일당 Livy 세션이 하나씩 실행됩니다. Livy 세션은 각각 Spark 작업 한 개씩에 상응합니다.

AWS Glue 개발 엔드포인트 및 SageMaker 노트북의 기본 동작

Spark 작업은 Spark 구성에 따라 실행됩니다. Spark 구성은 여러 가지 방식으로 설정할 수 있습니다(예: Spark 클러스터 구성, SparkMagic 구성 등).

기본적으로 Spark는 Spark 클러스터 구성에 따라 클러스터 리소스를 Livy 세션에 할당합니다. AWS Glue 개발 엔드포인트의 경우 클러스터 구성은 작업자 유형에 좌우됩니다. 다음은 작업자 유형에 따른 보편적인 구성을 설명한 표입니다.

표준 G.1X G.2X
spark.driver.memory 5G 10G 20G
spark.executor.memory 5G 10G 20G
spark.executor.cores 4 8 16
spark.dynamicAllocation.enabled TRUE TRUE TRUE

Spark 실행기 최대 수는 DPU(또는 NumberOfWorkers)와 작업자 유형을 조합하여 자동으로 계산됩니다.

표준 G.1X G.2X
Spark 실행기 최대 수 (DPU - 1) * 2 - 1 (NumberOfWorkers - 1) (NumberOfWorkers - 1)

예를 들어 개발 엔드포인트에 작업자가 10개이고 작업자 유형이 G.1X인 경우, Spark 실행기는 9개이고 클러스터 전체에는 실행기 메모리가 90G가 됩니다. 실행기마다 메모리가 10G씩이 때문입니다.

지정된 작업자 유형과 관계없이 Spark 동적 리소스 할당이 활성화됩니다. 데이터 집합이 충분히 크면 Spark가 모든 실행기를 하나의 Livy 세션에 할당할 가능성이 있습니다. spark.dynamicAllocation.maxExecutors가 기본적으로 설정되어 있지 않기 때문입니다. 이는 같은 개발 엔드포인트상의 다른 Livy 세션은 새 실행기 실행을 대기하게 된다는 뜻입니다. 데이터 집합 크기가 작은 경우 Spark가 실행기를 동시에 여러 Livy 세션에 할당할 수 있습니다.

참고

다양한 사용 사례에서 리소스 할당 방식을 자세히 알아보고 동작을 수정하기 위해 구성을 변경하는 법을 알아보려면 고급 구성: 여러 사용자 간에 개발 엔드포인트 공유 섹션을 참조하세요.