
Exception: Failed to create Livy session for executing notebook. Error: HTTP status code: 400
Synapse 파이프라인에서 노트북을 실행하려고 할 때 Livy 세션을 생성하지 못해서 발생한 오류이다.
Apache Livy는 Spark 노트북 실행을 관리하는 REST 인터페이스이므로 이 오류는 Livy와 Spark 풀 간의 연결 문제를 의미한다.
Synpase에서 사용하던 Spark의 버전(런타임)이 더 이상 지원되지 않아, 실행할 수 없는 상태가 되어 에러가 발생
그래서 Livy가 Spark 세션을 생성하려고 해도, 사용 가능한 Spark 환경이 없어서 실패하는 것이다. Synapse에서 Apache Spark를 실행하려면 반드시 지원되는 Spark 런타임이 필요하고, Livy는 이 Spark 풀에 연결해서 세션을 만들어야 한다.
그 외에도 아래와 같은 이유로 해당 에러가 발생할 수 있으며 이번 에러는 Case 3과 관련이 있다.
Livy(Session) = Spark 작업을 실행하기 위한 웹 API 기반 인터페이스
Spark 풀은 Apache Spark가 실행될 클러스터 환경이다.
드라이버 프로그램은 Spark 세션을 생성하고 실행기(executors)를 할당하는 역할이다.
| 작업 순서 | 시스템 | 작업 내용 |
|---|---|---|
| 1 | Spark 풀 | 버전 업그레이드 Spark 풀 생성 |
| 2 | Synapse 파이프라인 | 파이프라인 Spark 풀 변경 |
신규 Spark 풀 생성

신규 Spark 풀 생성 후, 기존 패키지 임포트 적용 & Apache Spark 구성 적용

Azure Synapse 내의 powershell에서 Apache Spark Pool 버전 업그레이드 명령어 실행
Update-AzSynapseSparkPool -ResourceGroupName "YourResourceGroupName" -WorkspaceName "YourWorkspaceName" -Name "YourSparkPoolName" -SparkVersion "3.4"

Azure Synpase와 Apache Spark의 관계는 Synapse 내에서 분산 처리를 수행할 수 있도록 하는 구조적 연결에 기반한다.
Apache Spark는 메모리 내 처리를 지원하여 빅 데이터 분석 애플리케이션의 성능을 향상하는 병렬 처리 프레임워크이다. Azure Synapse Analytics의 Apache Spark는 Microsoft가 구현한 클라우드의 Apache Spark 중 하나다. Azure Synapse를 사용하면 Azure에서 서버리스 Apache Spark 풀을 쉽게 만들고 구성할 수 있다. Azure Synapse의 Spark 풀은 Azure Storage 및 Azure Data Lake 2세대 스토리지와 호환된다. 따라서 Spark 풀을 사용하여 Azure에 저장된 데이터를 처리할 수 있다.
Apache Spark는 메모리 내 클러스터 컴퓨팅을 위한 기본 형식을 제공합니다. Spark 작업은 메모리로 데이터를 로드하고 캐시하여 반복적으로 쿼리할 수 있습니다. 메모리 내 컴퓨팅은 디스크 기반 애플리케이션보다 빠릅니다. 또한 Spark는 여러 프로그래밍 언어와 통합되기 때문에 로컬 컬렉션과 같은 분산 데이터 세트를 조작할 수 있습니다. 매핑 및 reduce 작업으로 모든 것을 구조화하지 않아도 됩니다. Azure Synapse의 Spark 풀은 완전 관리형 Spark 서비스를 제공합니다.
Azure Synapse의 Spark 풀에는 풀에서 기본적으로 사용할 수 있는 다음 구성 요소가 포함됩니다.

Spark 애플리케이션은 주 프로그램(드라이버 프로그램이라고 함)의 SparkContext 개체에 의해 조정된 풀에서 독립 프로세스 세트로 실행됩니다.
즉, Spark는 분산 시스템에서 대량 데이터를 처리하기 위해, 드라이버 프로그램이 SparkContext 를 통해 클러스터 전체를 조정하고, 실행기들이 각각 독립적으로 작업을 수행하는 구조이다.
Spark 풀은 Spark 작업을 실행할 수 있도록 미리 정의된 클러스터이다.
Apache Spark는 드라이버(driver)와 실행기(executor) 구조로 동작한다. Spark 애플리케이션이 실행되면 가장 먼저 드라이버 프로그램이 실행되고, 드라이버가 클러스터 내에 여러 실행기를 할당해서 작업을 수행하는 구조이다.
드라이버 프로그램(driver program): Spark 애플리케이션의 중심, 실행기를 관리하고 작업을 배포하는 컨트롤러
실행기(executors)
SparkContext 는 Spark 애플리케이션의 핵심 개체로, 클러스터 리소스를 관리하고 작업을 조정합니다.
MAXIMUM_WORKSPACE_CAPACITY_EXCEEDED관련 기록 : https://velog.io/@hyojinnnnnan/Azure-AVAILABLEPOOLCAPACITYEXCEEDED
서버리스 Apache Spark 풀은 Azure Portal에서 만든다. 이 풀은 인스턴스화하면 데이터를 처리하는 Spark 인스턴스를 만드는 데 사용되는 Spark 풀의 정의이다. Spark 인스턴스는 Spark 풀에 연결하고, 세션을 만들고, 작업을 실행할 때 생성된다. 여러 사용자가 단일 Spark 풀에 액세스할 수 있기 때문에 연결하는 사용자마다 새 Spark 인스턴스가 만들어진다.
모든 Azure Synapse 작업 영역에는 Spark에 사용할 수 있는 vCore의 기본 할당량이 제공된다. 할당량은 사용자 할당량과 데이터 흐름 할당량 간에 분할되므로 사용 패턴이 작업 영역에서 모든 vCore를 사용하지 않는다. 작업 영역에서 남은 것보다 더 많은 vCore를 요청하면 다음과 같은 오류가 발생한다.
Failed to start session: [User] MAXIMUM_WORKSPACE_CAPACITY_EXCEEDED
Your Spark job requested 480 vCores.
However, the workspace only has xxx vCores available out of quota of yyy vCores.
Try reducing the numbers of vCores requested or increasing your vCore quota. Click here for more information - https://learn.microsoft.com/en-us/azure/synapse-analytics/spark/apache-spark-concepts
Synapse의 Spark 풀은 동적 리소스 할당을 기반으로 동작하며, 여러 사용자가 동시에 접근하면 다음과 같은 방식으로 리소스가 분배된다.
Synapse는 각 사용자의 요청을 Spark 풀에 전달
Livy가 새로운 Spark 세션을 생성하고, 해당 사용자가 사용할 실행기(executors)를 요청
Spark 풀에서 사용 가능한 리소스를 확인하여 할당
Spark 풀은 현재 가용한 리로스를 확인하고, 사용자가 요청한 실행기 크기에 맞춰 할당
동시 실행 사용자가 많으면 리소스 제한 발생
Your Spark job requested xx vCoresSpark 풀을 정의하는 경우 해당 풀에 대한 사용자당 할당량을 효과적으로 정의하는 것이다. 여러 개의 Notebook 또는 작업을 실행하거나 이 둘을 혼합하여 실행하면 풀 할당량이 소진될 수 있다. 이렇게 하면 오류 메시지가 생성된다.
Failed to start session: Your Spark job requested xx vCores.
However, the pool is consuming yy vCores out of available zz vCores.Try ending the running job(s) in the pool, reducing the numbers of vCores requested, increasing the pool maximum size or using another pool
이 문제를 해결하려면 Notebook 또는 작업을 실행하여 새 리소스 요청을 제출하기 전에 풀 리소스의 사용량을 줄여야 한다.
Synapse에서 Spark 코드를 직접 작성하지 않더라도, 특정 작업을 수행할 때 Spark 세션이 자동으로 활성화될 수 있다.
