이 문서에서는Google Cloud Apache Spark용 서버리스 Spark 일괄 워크로드 및 대화형 세션이 시작되지 않는 일반적인 문제를 해결하는 방법을 안내합니다.
개요
일반적으로 배치 또는 세션이 시작되지 않으면 다음 오류 메시지가 보고됩니다.
Driver compute node failed to initialize for batch in 600 seconds
이 오류 메시지는 Spark 드라이버가 기본 제한 시간인 600초 (10분) 내에 시작되지 않았음을 나타냅니다. 일반적인 원인은 서비스 계정 권한, 리소스 가용성, 네트워크 구성 또는 Spark 속성과 관련이 있습니다.
배치 및 세션 시작 실패 원인 및 문제 해결 단계
다음 섹션에는 문제를 해결하는 데 도움이 되는 문제 해결 팁과 함께 배치 및 세션 시작 실패의 일반적인 원인이 나열되어 있습니다.
서비스 계정 권한 부족
Apache Spark용 서버리스 일괄 또는 세션에서 사용하는 서비스 계정에는 Apache Spark용 서버리스 작업 권한과 Google Cloud 리소스 액세스 권한이 포함된 특정 IAM 역할이 필요합니다. 서비스 계정에 필요한 역할이 없으면 배치 또는 세션의 Spark 드라이버가 초기화되지 않을 수 있습니다.
- 필수 작업자 역할: 일괄 또는 세션 서비스 계정에는 Dataproc 작업자 역할 (
roles/dataproc.worker
)이 있어야 합니다. 이 역할에는 Serverless for Apache Spark가 컴퓨팅 리소스를 프로비저닝하고 관리하는 데 필요한 최소 권한이 포함되어 있습니다. - 데이터 액세스 권한: Spark 애플리케이션이 Cloud Storage 또는 BigQuery에서 읽거나 Cloud Storage 또는 BigQuery에 쓰는 경우 서비스 계정에 해당 서비스와 관련된 역할이 필요합니다.
- Cloud Storage: 읽기에는
Storage Object Viewer
역할 (roles/storage.objectViewer
)이 필요하고 쓰기에는Storage Object Creator
역할 (roles/storage.objectCreator
) 또는Storage Object Admin
역할 (roles/storage.admin
)이 필요합니다. - BigQuery: 읽기에는
BigQuery Data Viewer
역할 (roles/bigquery.dataViewer
)이 필요하고 쓰기에는BigQuery Data Editor
역할 (roles/bigquery.dataEditor
)이 필요합니다.
- Cloud Storage: 읽기에는
- 로깅 권한: 서비스 계정에는 Cloud Logging에 로그를 쓸 수 있는 권한이 있는 역할이 필요합니다. 일반적으로
Logging Writer
역할 (roles/logging.logWriter
)이면 충분합니다.
문제 해결 팁:
- 일괄 또는 세션 서비스 계정을 식별합니다. 지정하지 않으면 기본적으로 Compute Engine 기본 서비스 계정이 사용됩니다.
- Google Cloud 콘솔의 IAM 및 관리자 > IAM 페이지로 이동하여 일괄 또는 세션 서비스 계정을 찾은 다음 작업에 필요한 역할이 있는지 확인합니다. 누락된 역할을 부여합니다.
할당량 부족
Google Cloud Apache Spark용 서버리스 또는 기타 Google Cloud 리소스의 프로젝트 또는 리전별 할당량을 초과하면 새 배치 또는 세션이 시작되지 않을 수 있습니다.
문제 해결 팁:
Apache Spark용 서버리스 할당량 페이지를 검토하여 동시 일괄, DCU, 셔플 스토리지의 한도를 파악합니다.Google Cloud
gcloud compute quotas list
명령어를 사용하여 프로젝트 및 리전의 현재 사용량과 한도를 볼 수도 있습니다.gcloud compute quotas list --project=PROJECT_ID --filter="service:dataproc.googleapis.com"
할당량 한도에 반복적으로 도달하는 경우 Google Cloud 콘솔을 통해 할당량 증가를 요청하는 것이 좋습니다.
네트워크 구성 문제
VPC 구성, 비공개 Google 액세스, 방화벽 규칙과 같은 잘못된 네트워크 설정으로 인해 Spark 드라이버가 초기화되거나 필요한 서비스에 연결되지 않을 수 있습니다.
문제 해결 팁:
일괄 또는 세션에 지정된 VPC 네트워크와 서브넷이 올바르게 구성되어 있고 사용 가능한 IP 주소가 충분한지 확인합니다.
배치 또는 세션이 공개 인터넷을 통과하지 않고 Google API 및 서비스에 액세스해야 하는 경우 서브넷에 비공개 Google 액세스가 사용 설정되어 있는지 확인합니다.
VPC 방화벽 규칙을 검토하여 Spark 애플리케이션에 필요한 내부 통신 또는 Google API 또는 외부 서비스로의 이그레스를 실수로 차단하지 않는지 확인합니다.
잘못된 Spark 속성 또는 애플리케이션 코드 문제
잘못 구성된 Spark 속성(특히 드라이버 리소스와 관련된 속성) 또는 Spark 애플리케이션 코드 내의 문제로 인해 시작이 실패할 수 있습니다.
문제 해결 팁:
spark.driver.memory
및spark.driver.cores
값을 확인합니다. 합리적인 한도 내에 있고 사용 가능한 DCU와 일치하는지 확인합니다. 이러한 속성의 값이 너무 크면 리소스가 소진되고 초기화가 실패할 수 있습니다. 디버깅을 간소화하기 위해 불필요하거나 실험적인 Spark 속성을 삭제합니다.'Hello World' Spark 애플리케이션을 실행하여 문제가 환경 설정에 있는지 아니면 코드 복잡성이나 오류로 인한 것인지 확인합니다.
일괄 또는 세션에 지정된 모든 애플리케이션 JAR, Python 파일 또는 종속 항목이 Cloud Storage에 올바르게 위치하고 일괄 또는 세션 서비스 계정에서 액세스할 수 있는지 확인합니다.
로그 확인
일괄 생성 실패를 진단하는 데 중요한 단계는 Cloud Logging의 세부 로그를 검사하는 것입니다.
- Google Cloud 콘솔에서 Cloud Logging 페이지로 이동합니다.
- Apache Spark용 Dataproc Serverless 일괄 또는 세션 필터:
- 리소스 드롭다운에서
Cloud Dataproc Batch
또는Cloud Dataproc Session
를 선택합니다. - 실패한 배치 또는 세션에 대해
batch_id
또는session_id
로 필터링합니다.project_id
및location
(지역)별로 필터링할 수도 있습니다.
- 리소스 드롭다운에서
jsonPayload.component="driver"
가 포함된 로그 항목을 찾습니다. 이러한 로그에는 600초 시간 제한이 발생하기 전에 드라이버 초기화 실패의 이유를 파악할 수 있는 특정 오류 메시지나 스택 트레이스가 포함되는 경우가 많습니다.