Lightning Engine 사용
Lightning Engine은 차세대 Apache Spark 성능으로, 성능, 비용 효율성, 운영 안정성을 크게 개선하도록 설계된 독점적인 개선사항을 도입합니다.
혜택
Lightning Engine의 이점은 다음과 같습니다.
가속화된 데이터 작업: 메타데이터 처리, 쓰기 워크로드, 벡터화된 I/O를 비롯한 클라우드 스토리지 상호작용을 최적화하여 상당한 성능 향상과 비용 절감을 달성합니다.
지능형 쿼리 실행: 스캔된 데이터를 동적으로 줄이고, 데이터 처리를 최적화하며, 더 빠르고 비용 효율적인 쿼리를 위해 더 효율적인 실행 계획을 생성하는 고급 최적화 도구 개선사항을 활용합니다.
간소화된 AI 및 ML 워크로드: 기본 AI 및 ML 이미지를 사용하여 GPU 기반 워크로드의 클러스터 시작 시간을 줄이고 보안 환경에서 배포를 간소화합니다.
Lightning Engine은 상당한 성능 향상을 제공하지만, 구체적인 영향은 워크로드에 따라 다릅니다. I/O 바운드 작업보다는 Spark DataFrame API, Spark Dataset API, Spark SQL 쿼리를 활용하는 컴퓨팅 집약적인 작업에 가장 적합합니다.
표준 엔진과 비교
Lightning Engine은 Managed Service for Apache Spark 클러스터에서 Spark 작업을 실행하는 데 사용되는 표준 엔진의 대안입니다. 다음 표에서는 Lightning Engine과 표준 엔진 활성화 속성, 워크로드 적용 가능성, 주요 이점을 비교합니다.
| 기능 | 표준 엔진 | Lightning Engine |
|---|---|---|
| 활성화 속성 | --engine=default 또는 플래그 설정 해제 |
--engine=lightning |
| 최적 | 범용 작업, 개발, 테스트 | 상당한 가속이 필요한 엔터프라이즈 규모 워크로드 |
| 주요 혜택 | 기준 성능 | 최적화된 클라우드 스토리지 상호작용, 지능형 쿼리 실행 |
요구사항
다음 요구사항은 Lightning Engine 기능에 적용됩니다.
- 이미지 버전: Lightning Engine은 Managed Service for Apache Spark
이미지 버전
2.3.3이상과 함께 사용해야 합니다. - 지원되는 작업: Spark, PySpark, SparkSQL, SparkR이 지원됩니다. 표준 엔진은 Lightning Engine 클러스터에 제출된 다른 작업 유형에서 실행됩니다.
네이티브 쿼리 실행
네이티브 쿼리 실행 (NQE)은 특정 작업에 더 심층적인 가속을 제공하는 Lightning Engine의 선택적 구성요소입니다. Apache Gluten 및 Velox를 기반으로 하는 네이티브 엔진으로, Google 하드웨어에 최적화되어 있으며 JVM 외부에서 Spark 쿼리의 일부를 실행하여 성능을 향상합니다.
- NQE는 다음 작업에 권장됩니다.
- Parquet 및 ORC 파일에서 데이터를 읽는 Spark DataFrame API, Spark Dataset API, Spark SQL 쿼리를 활용하는 컴퓨팅 집약적인 작업 (I/O 바운드 작업이 아님) 출력 파일 형식은 성능에 영향을 미치지 않습니다.
- NQE는 다음 작업에 권장되지 않습니다.
- 복원 가능한 분산 데이터 세트 (RDD), 사용자 정의 함수 (UDF) 또는 대부분의 Spark 머신러닝 (ML) 라이브러리에 크게 의존하는 작업
요구사항
다음 요구사항은 네이티브 쿼리 실행 기능에 적용됩니다.
실행 엔진: NQE는 클러스터를 만들 때 Lightning 엔진이 사용 설정된 클러스터에서만 사용할 수 있습니다.
운영체제:
Debian-12이미지만 지원됩니다. 다른 OS를 사용하는 NQE 지원 작업은 실패합니다.지원되는 작업: Spark, PySpark, SparkSQL, SparkR이 지원됩니다. 표준 엔진은 Lightning Engine 클러스터에 제출된 다른 작업 유형에서 NQE 없이 실행됩니다.
머신 유형: Intel 또는 AMD 프로세서를 사용하는 머신 계열만 지원됩니다. ARM 프로세서를 사용하는 NQE 지원 작업은 실패하지만 (NQE 없이 Lightning Engine의 이점을 누릴 수 있음),
GPU 및 액셀러레이터 없음: GPU 액셀러레이터에서 제출된 NQE 지원 작업은 실패하지만 (NQE 없이 Lightning Engine의 이점을 누릴 수 있음)
데이터 유형: 다음 데이터 유형의 입력은 지원되지 않습니다.
- 바이트: ORC 및 Parquet
- 구조체, 배열, 지도: Parquet
가격 책정
가격 책정 정보는 Compute Engine 기반 Managed Service for Apache Spark 가격 책정을 참조하세요.
Lightning Engine 클러스터 만들기
이 섹션에서는 클러스터에 제출된 Spark 작업에서 Lightning Engine을 사용 설정하는 Managed Service for Apache Spark 클러스터를 만드는 방법을 보여줍니다.
클러스터를 만들 때 클러스터에서 네이티브 쿼리 실행 (NQE)을 사용 설정할 수도 있고, 클러스터에 제출된 특정 Spark 작업에 대해 나중에 NQE를 사용 설정할 수도 있습니다.
시작하기 전에
- 계정에 로그인합니다. Google Cloud 를 처음 사용하는 경우 Google Cloud, 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init
필요한 역할
Managed Service for Apache Spark 클러스터를 만들고 클러스터에 작업을 제출하려면 특정 IAM 역할이 필요합니다. 조직 정책에 따라 이러한 역할이 이미 부여되었을 수 있습니다. 역할 부여를 확인하려면 역할을 부여해야 하나요?를 참고하세요.
역할 부여에 대한 상세 설명은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
사용자 역할
Managed Service for Apache Spark 클러스터를 만드는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
프로젝트의 Managed Service for Apache Spark 편집자 (
roles/dataproc.editor) -
Compute Engine 기본 서비스 계정의 서비스 계정 사용자 (
roles/iam.serviceAccountUser)
서비스 계정 역할
Compute Engine 기본 서비스 계정에 Managed Service for Apache Spark 클러스터를 만드는 데 필요한 권한이 있는지 확인하려면 관리자에게 Compute Engine 기본 서비스 계정에 프로젝트에 대한 Managed Service for Apache Spark 작업자 (roles/dataproc.worker) IAM 역할을 부여해 달라고 요청하세요.
클러스터 만들기
다음 예에서는 콘솔, Google Cloud CLI, Dataproc API, Python 또는 Terraform을 사용하여 Lightning Engine 클러스터를 만드는 방법을 보여줍니다. Google Cloud Go, Java, Node.js 클라이언트 라이브러리를 사용하여 Lightning Engine이 사용 설정된 Managed Service for Apache Spark 클러스터를 만들 수도 있습니다. Node.js
콘솔
콘솔에서 Compute Engine에서 Apache Spark 클러스터 만들기 로 이동합니다. Google Cloud 자세한 내용은 콘솔로 클러스터 만들기를 참고하세요. Google Cloud
클러스터 정의에서 Lightning Engine 사용 설정 체크박스를 선택하여 Lightning Engine이 사용 설정된 클러스터를 만듭니다.
(선택사항) Spark 작업에 네이티브 실행 런타임을 기본적으로 사용 설정하려면 네이티브 실행 사용 설정 체크박스를 선택합니다.
필요에 따라 다른 클러스터 설정을 구성합니다.
만들기 를 클릭합니다.
gcloud CLI
Lightning Engine이 사용 설정된 클러스터를 만들려면
gcloud dataproc clusters create명령어와 함께--engine=lightning플래그를 실행합니다. 자세한 내용은 gcloud CLI로 클러스터 만들기를 참고하세요.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --engine=lightning \ --image-version=2.3(선택사항) Spark 작업에 네이티브 실행 런타임을 기본적으로 사용 설정하려면
spark:spark.dataproc.lightningEngine.runtime=native속성을 포함합니다.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --engine=lightning \ --image-version=2.3 \ --properties='spark:spark.dataproc.lightningEngine.runtime=native'
API
Lightning Engine이 사용 설정된 클러스터를 만들려면 clusters.create 요청을 보냅니다. 자세한 내용은
REST API로 클러스터 만들기를 참고하세요.
요청 본문에서
engine필드를LIGHTNING으로 설정합니다.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3" } }, "engine": "LIGHTNING" }(선택사항) 모든 작업에 네이티브 실행 런타임을 기본적으로 사용 설정하려면
spark:spark.dataproc.lightningEngine.runtime속성을 포함합니다.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3", "properties": { "spark:spark.dataproc.lightningEngine.runtime": "native" } } }, "engine": "LIGHTNING" }
Python
Lightning Engine이 사용 설정된 클러스터를 만들려면
create_cluster메서드를 사용하고 클러스터 구성에서engine필드를LIGHTNING으로 설정합니다. 자세한 내용은 Python으로 클러스터 만들기를 참고하세요.from google.cloud import dataproc_v1 def create_lightning_cluster(project_id, region, cluster_name): client_options = {"api_endpoint": f"{region}-dataproc.googleapis.com:443"} cluster_client = dataproc_v1.ClusterControllerClient(client_options=client_options) cluster = { "project_id": project_id, "cluster_name": cluster_name, "config": { "engine": "LIGHTNING", "software_config": { "image_version": "2.3-debian12", }, } } operation = cluster_client.create_cluster( project_id=project_id, region=region, cluster=cluster ) result = operation.result() print(f"Cluster created successfully: {result.cluster_name}")(선택사항) Spark 작업에 네이티브 실행 런타임을 기본적으로 사용 설정하려면
spark:spark.dataproc.lightningEngine.runtime속성을 포함합니다.from google.cloud import dataproc_v1 def create_lightning_native_cluster(project_id, region, cluster_name): client_options = {"api_endpoint": f"{region}-dataproc.googleapis.com:443"} cluster_client = dataproc_v1.ClusterControllerClient(client_options=client_options) cluster = { "project_id": project_id, "cluster_name": cluster_name, "config": { "engine": "LIGHTNING", "software_config": { "image_version": "2.3-debian12", "properties": { "spark:spark.dataproc.lightningEngine.runtime": "native" } } } } operation = cluster_client.create_cluster( project_id=project_id, region=region, cluster=cluster ) result = operation.result() print(f"Cluster created successfully: {result.cluster_name}")
Terraform
google_dataproc_cluster리소스 구성에서engine인수를LIGHTNING으로 설정합니다.- 자세한 내용과 고급 옵션은 공식 Terraform
문서에서
google_dataproc_cluster리소스를 참고하세요.
클러스터 엔진 확인
콘솔
- 콘솔에서 클러스터 세부정보 페이지로 이동합니다. Google Cloud
- 엔진 필드에
Lightning Engine값이 나열되어 있는지 확인합니다. - 네이티브 쿼리 실행을 사용 설정한 경우 네이티브 실행 필드에
native가 나열되어 있는지 확인합니다.
gcloud
엔진 및 NQE (사용 설정된 경우)를 확인하려면
gcloud dataproc clusters describe명령어를 실행합니다.gcloud dataproc clusters describe CLUSTER_NAME --project=PROJECT_ID --region=REGIONengine및lightningEngine.runtime속성의 출력을 확인합니다.clusterName: lightning-engine-cluster engine: lightningEngine lightningEngine.runtime: native
Lightning Engine으로 작업 제출
Lightning Engine 클러스터를 만든 후 클러스터에 Spark 작업을 제출하면 작업에서 Lightning Engine이 자동으로 사용 설정됩니다.
작업에 네이티브 쿼리 실행 사용 설정
Lightning Engine 클러스터를 만들 때 네이티브 쿼리 실행 (NQE)을 사용 설정한 경우 특정 작업에서 NQE를 사용 중지하지 않는 한 모든 Spark 작업이 NQE가 사용 설정된 상태로 실행됩니다.
Lightning Engine 클러스터를 만들 때 NQE를 사용 설정하지 않은 경우 다음 예와 같이 작업을 제출할 때 특정 작업에 대해 NQE를 사용 설정할 수 있습니다.
gcloud
Spark 작업을 제출할 때 네이티브 쿼리 실행을 사용 설정하려면 spark.dataproc.lightningEngine.runtime=native 속성을 포함합니다.
```none
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=native \
-- ...
```
API
Spark 작업을 제출할 때 네이티브 쿼리 실행을 사용 설정하려면 요청에 spark.dataproc.lightningEngine.runtime 속성을 포함합니다.
```json
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"native"
}
}
}
}
```
작업에 네이티브 쿼리 실행 사용 중지
다음 예와 같이 작업을 제출할 때 특정 Spark 작업에 대해 NQE를 사용 중지할 수 있습니다.
gcloud
```shell
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=default \
-- ...
```
API
```json
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"default"
}
}
}
}
```
작업에 네이티브 쿼리 실행 확인
Lightning Engine 클러스터에 작업을 제출한 후 작업에 네이티브 쿼리 실행이 사용 설정되어 있는지 확인할 수 있습니다.
콘솔
- 콘솔에서 작업 세부정보 페이지로 이동합니다. Google Cloud
- 네이티브 실행 필드에
native가 나열되어 있는지 확인합니다.
gcloud
gcloud dataproc jobs describe명령어를 실행합니다.gcloud dataproc clusters describe JOB_ID --project=PROJECT_ID --region=REGION** 속성** 섹션에서
lightningEngine.runtime의 출력을 확인합니다.lightningEngine.runtime: native
구성 매개변수
다음 표에서는 Lightning Engine 및 네이티브 쿼리 실행의 주요 구성 매개변수를 요약합니다.
| 파라미터 이름 | 설명 | 적용 가능한 엔진 | 기본값 | 기본값 (Lightning Engine) | 사용자 재정의 가능 (작업 수준) | 범위 |
|---|---|---|---|---|---|---|
--engine |
클러스터를 만들 때 엔진을 선택하는 클러스터 수준 설정입니다. | 클러스터 전체 | default |
lightning |
아니요 | 클러스터 |
spark:spark.dataproc.lightningEngine.runtime |
클러스터를 만들 때 Lightning 엔진 런타임을 선택하는 클러스터 수준 설정입니다. | Lightning만 해당 | default |
default |
아니요 | 클러스터 |
spark.dataproc.lightningEngine.runtime |
Lightning Engine 내에서 네이티브 쿼리 실행 (NQE)을 사용 설정 또는 중지합니다. | Lightning만 해당 | default |
default |
예. native 또는 default로 설정할 수 있습니다. |
작업 |
제한사항
다음 시나리오에서 네이티브 쿼리 실행을 사용 설정하면 예외, Spark 비호환성 또는 워크로드가 기본 Spark 엔진으로 폴백될 수 있습니다.
대체
다음 시나리오에서 네이티브 쿼리 실행을 사용하면 워크로드가 Spark 실행 엔진으로 폴백될 수 있습니다.
- ANSI: ANSI 모드가 사용 설정된 경우 실행이 Spark로 폴백됩니다.
- 대소문자 구분 모드: 네이티브 쿼리 실행은 Spark 기본 대소문자 구분 모드만 지원합니다. 대소문자 구분 모드가 사용 설정된 경우 잘못된 결과가 발생할 수 있습니다.
- 파티션을 나눈 테이블 스캔: 네이티브 쿼리 실행은 경로에 파티션 정보가 포함된 경우에만 파티션을 나눈 테이블 스캔을 지원합니다. 그렇지 않으면 워크로드가 Spark 실행 엔진으로 폴백됩니다.
비호환 동작
다음과 같은 경우 네이티브 쿼리 실행을 사용하면 비호환 동작 또는 잘못된 결과가 발생할 수 있습니다.
- JSON 함수: 네이티브 쿼리 실행은 작은따옴표가 아닌
큰따옴표로 묶인 문자열을 지원합니다. 작은따옴표를 사용하면 잘못된 결과가 발생합니다.
get_json_object함수와 함께 경로에*를 사용하면NULL이 반환됩니다. - Parquet 읽기 구성:
- 네이티브 쿼리 실행은
spark.files.ignoreCorruptFiles를true로 설정한 경우에도 기본false값으로 설정된 것으로 처리합니다. - 네이티브 쿼리 실행은
spark.sql.parquet.datetimeRebaseModeInRead를 무시하고 Parquet 파일 콘텐츠만 반환합니다. 기존 하이브리드 캘린더와 Proleptic 그레고리오 캘린더의 차이는 고려되지 않습니다. Spark 결과가 다를 수 있습니다.
- 네이티브 쿼리 실행은
- NaN: 지원되지 않음. 예를 들어 숫자 비교에서
NaN을 사용하는 경우 예기치 않은 결과가 발생할 수 있습니다. - Spark 열 형식 읽기: Spark 열 형식 벡터가 네이티브 쿼리 실행과 호환되지 않으므로 심각한 오류가 발생할 수 있습니다.
- 스필: 셔플 파티션을 큰 수로 설정하면
디스크 스필 기능이
OutOfMemoryException을 트리거할 수 있습니다. 이 경우 파티션 수를 줄이면 이 예외를 없앨 수 있습니다.