このドキュメントでは、Lightning Engine を有効にして、Managed Service for Apache Spark バッチ ワークロードとインタラクティブ セッションを高速化する方法について説明します。
概要
Lightning Engine は、マルチレイヤ最適化エンジンを搭載した高性能クエリ アクセラレータです。このエンジンは、クエリや実行の最適化などの従来の最適化手法と、ファイル システム レイヤやデータアクセス コネクタでのキュレートされた最適化の両方を行います。
次の図に示すように、Lightning Engine は、Spark クエリ
の実行パフォーマンスをTPC-Hのようなワークロード
(10 TB のデータセット サイズ) で高速化します。
詳細については、 Lightning Engine のご紹介 - Apache Spark を次世代のパフォーマンスにをご覧ください。
Lightning Engine の可用性
- Lightning Engine は、 Managed Service for Apache Spark ランタイム 2.3 で使用できます。
- Lightning Engine は、Managed Service for Apache Spark
プレミアム料金階層でのみ使用できます。
- バッチ ワークロード: Lightning Engine は、プレミアム階層のバッチ ワークロードで自動的に有効になります。必要なご対応は特にありません。
- インタラクティブ セッション: Lightning Engine は、インタラクティブ セッションではデフォルトで有効になっていません。有効にするには、 Lightning Engine を有効にするをご覧ください。
- セッション テンプレート: Lightning Engine は、セッション テンプレートではデフォルトで有効になっていません。有効にするには、 Lightning Engine を有効にするをご覧ください。
Lightning Engine を有効にする
次のセクションでは、Managed Service for Apache Spark バッチ ワークロード、セッション テンプレート、インタラクティブ セッションで Lightning Engine を有効にする方法について説明します。
バッチ ワークロード
バッチ ワークロードで Lightning Engine を有効にする
コンソール、Google Cloud CLI、Dataproc API を使用して、バッチ ワークロードで Lightning Engine を有効にできます。 Google Cloud
コンソール
コンソールを使用して、バッチ ワークロードで Lightning Engine を有効にします。 Google Cloud
コンソールで次の操作を行います。 Google Cloud
- Managed Service for Apache Spark バッチに移動します。
- [作成] をクリックして [バッチ作成] ページを開きます。
次のフィールドを選択して入力します。
- コンテナ:
- ランタイム バージョン:
2.3を選択します。
- ランタイム バージョン:
階層構成:
- [
Premium] を選択します。これにより、[LIGHTNING ENGINE を有効にして Spark のパフォーマンスを向上させる] が自動的に有効になり、オンになります。
プレミアム階層を選択すると、ドライバ コンピューティング階層 とエグゼキュータ コンピューティング階層 が
Premiumに設定されます。3.0より前のランタイムを使用するバッチでは、これらの自動的に設定されるプレミアム ティアのコンピューティング設定をオーバーライドすることはできません。ドライバ ディスク階層 とエグゼキュータ ディスク階層 を
Premiumに構成するか、デフォルトのStandard階層の値のままにすることができます。プレミアム ディスク階層を選択する場合は、ディスクサイズを選択する必要があります。詳細については、 リソース割り当てプロパティをご覧ください。- [
プロパティ: 省略可:
Key(プロパティ名)とValueのペアを入力して、 ネイティブ クエリ実行ランタイムを選択します:キー 値 spark.dataproc.lightningEngine.runtime先住民
- コンテナ:
他のバッチ ワークロードの設定を入力、選択、確認します。 Spark バッチ ワークロードを送信するをご覧ください。
[送信] をクリックして Spark バッチ ワークロードを実行します。
gcloud
次の gcloud CLI
gcloud dataproc batches submit spark
コマンド フラグを設定して、バッチ ワークロードで Lightning Engine を有効にします。
gcloud dataproc batches submit spark \ --project=PROJECT_ID \ --region=REGION \ --version=2.3 \ --properties=dataproc.tier=premium \ OTHER_FLAGS_AS_NEEDED
注:
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。 プロジェクト ID は、 Google Cloud コンソールのダッシュボードの [プロジェクト情報] セクションに表示されます。
- REGION: ワークロードを実行できる利用可能な Compute Engine リージョン。
--properties=dataproc.tier=premium。プレミアム階層を設定すると、バッチ ワークロードに次のプロパティが自動的に設定されます。spark.dataproc.engine=lightningEngineは、バッチ ワークロードに Lightning Engine を選択します。spark.dataproc.driver.compute.tierとspark.dataproc.executor.compute.tierはpremiumに設定されます(リソース割り当てプロパティを参照)。3.0より前のランタイムを使用する Batch では、プレミアム ティアのコンピューティング設定を自動的にオーバーライドすることはできません。
その他のプロパティ
ネイティブ クエリエンジン:
spark.dataproc.lightningEngine.runtime=nativeネイティブ クエリ実行ランタイムを選択する場合は、このプロパティを追加します。ディスク階層とサイズ: デフォルトでは、ドライバとエグゼキュータ ディスクサイズは
standard階層とサイズに設定されます。プロパティを追加して、premiumディスク階層とサイズ(375 GiBの倍数)を選択できます。
詳細については、リソース割り当てプロパティをご覧ください。
OTHER_FLAGS_AS_NEEDED: Spark バッチ ワークロードを送信するをご覧ください。
API
バッチ ワークロードで Lightning Engine を有効にするには、
batches.create リクエストの一部として次の操作を行います。
- RuntimeConfig.version
を
2.3に設定します。 -
spark.dataproc.engine=lightningEngineは、バッチ ワークロードに Lightning Engine を選択します。spark.dataproc.driver.compute.tierとspark.dataproc.executor.compute.tierはpremiumに設定されます(リソース割り当てプロパティを参照)。3.0より前のランタイムを使用するバッチでは、これらの自動的に設定されたプレミアム ティアのコンピューティング設定をオーバーライドすることはできません。
その他の RuntimeConfig.properties:
ネイティブ クエリエンジン:
spark.dataproc.lightningEngine.runtime:native。 ネイティブ クエリ実行ランタイムを選択する場合は、このプロパティを追加します。ディスク階層とサイズ: デフォルトでは、ドライバとエグゼキュータ ディスクサイズは
standard階層とサイズに設定されます。プロパティを追加して、premium階層とサイズ(375 GiBの倍数)を選択できます。
詳細については、リソース割り当てプロパティをご覧ください。
他のバッチ ワークロード API フィールドを設定するには、Spark バッチ ワークロードを送信する をご覧ください。
セッション テンプレート
セッション テンプレートで Lightning Engine を有効にする
コンソール、Google Cloud CLI、Dataproc API を使用して、Jupyter またはSpark Connect セッションのセッション テンプレートで Lightning Engine を有効にできます。 Google Cloud
コンソール
コンソールを使用して、バッチ ワークロードで Lightning Engine を有効にします。 Google Cloud
コンソールで次の操作を行います。 Google Cloud
- Managed Service for Apache Spark セッション テンプレートに移動します。
- [作成] をクリックして [セッション テンプレートの作成] ページを開きます。
次のフィールドを選択して入力します。
- セッション テンプレート情報:
- [Lightning Engine を有効にして Spark のパフォーマンスを向上させる] を選択します。
- 実行構成:
- ランタイム バージョン:
2.3を選択します。
- ランタイム バージョン:
プロパティ: 次の
Key(プロパティ名)とValueのペアを入力して、 プレミアム階層を選択します:キー 値 dataproc.tierプレミアム spark.dataproc.enginelightningEngine 省略可: ネイティブ クエリ実行ランタイムを選択する場合は、次の
Key(プロパティ名)とValueのペアを入力します。キー 値 spark.dataproc.lightningEngine.runtimenative
- セッション テンプレート情報:
[送信] をクリックしてセッション テンプレートを作成します。
gcloud
gcloud CLI を使用して、Managed Service for Apache Spark セッション テンプレートを直接作成することはできません。代わりに、
gcloud beta dataproc session-templates import コマンドを使用して既存のセッション テンプレートをインポートし、インポートしたテンプレートを編集して
Lightning Engine とネイティブ クエリ ランタイム(省略可)を有効にしてから、
編集したテンプレートを gcloud beta dataproc session-templates export
コマンドを使用してエクスポートします。
API
セッション テンプレートで Lightning Engine を有効にするには、
sessionTemplates.create リクエストの一部として次の操作を行います。
- RuntimeConfig.version
を
2.3に設定します。 - RuntimeConfig.properties
その他の RuntimeConfig.properties:
- ネイティブ クエリエンジン:
spark.dataproc.lightningEngine.runtime:native: RuntimeConfig.properties にこのプロパティを追加して、ネイティブ クエリ実行 ランタイムを選択します。
他のセッション テンプレート API フィールドを設定するには、セッション テンプレートを作成する をご覧ください。
インタラクティブ セッション
インタラクティブ セッションで Lightning Engine を有効にする
Google Cloud CLI または Dataproc API を使用して、Managed Service for Apache Spark インタラクティブ セッションで Lightning Engine を有効にできます。 BigQuery Studio ノートブックのインタラクティブ セッションで Lightning Engine を有効にすることもできます。
gcloud
次の gcloud CLI
gcloud beta dataproc sessions create spark
コマンド フラグを設定して、インタラクティブ セッションで Lightning Engine を有効にします。
gcloud beta dataproc sessions create spark \ --project=PROJECT_ID \ --location=REGION \ --version=2.3 \ --properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine \ OTHER_FLAGS_AS_NEEDED
注:
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。 プロジェクト ID は、 Google Cloud コンソールのダッシュボードの [プロジェクト情報] セクションに表示されます。
- REGION: ワークロードを実行できる利用可能な Compute Engine リージョン。
--properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine。これらのプロパティにより、セッションで Lightning Engine が有効になります。その他のプロパティ:
- ネイティブ クエリエンジン:
spark.dataproc.lightningEngine.runtime=native: このプロパティを追加して、 ネイティブ クエリ実行ランタイムを選択します。
- ネイティブ クエリエンジン:
OTHER_FLAGS_AS_NEEDED: インタラクティブ セッションを作成するをご覧ください。
API
セッションで Lightning Engine を有効にするには、
sessions.create リクエストの一部として次の操作を行います。
- RuntimeConfig.version
を
2.3に設定します。 - RuntimeConfig.properties
その他の RuntimeConfig.properties:
- ネイティブ クエリエンジン:
spark.dataproc.lightningEngine.runtime:native: ネイティブ クエリ実行ランタイムを選択する場合は、このプロパティをRuntimeConfig.propertiesに追加します。
他のセッション テンプレート API フィールドを設定するには、インタラクティブ セッションを作成する をご覧ください。
BigQuery ノートブック
BigQuery Studio PySpark ノートブックでセッションを作成するときに、Lightning Engine を有効にできます。
from google.cloud.dataproc_spark_connect import DataprocSparkSession
from google.cloud.dataproc_v1 import Session
session = Session()
# Enable Lightning Engine.
session.runtime_config.properties["version"] = "2.3"
session.runtime_config.properties["dataproc.tier"] = "premium"
session.runtime_config.properties["spark.dataproc.engine"] = "lightningEngine"
# Enable THE Native Query Execution runtime.
session.runtime_config.properties["spark.dataproc.lightningEngine.runtime"] = "native"
# Create the Spark session.
spark = (
DataprocSparkSession.builder
.appName("APP_NAME")
.dataprocSessionConfig(session)
.getOrCreate())
# Add Spark application code here:
Lightning Engine の設定を確認する
コンソール Google Cloud 、Google Cloud CLI、Dataproc API を使用して、バッチ ワークロード、セッション テンプレート、 インタラクティブ セッションで Lightning Engine の設定を確認できます。
バッチ ワークロード
バッチの階層 が
premiumに設定され、エンジン がLightning Engineに設定されていることを確認するには:- Google Cloud コンソール: [バッチ] ページで、 バッチの [**階層**] 列と [**エンジン**] 列を確認します。[バッチ ID] をクリックして、バッチの詳細ページでこれらの設定を表示することもできます。
- gcloud CLI:
gcloud dataproc batches describeコマンドを実行します。 - API:
batches.getリクエストを発行します。
セッション テンプレート
セッション テンプレートのエンジン が
Lightning Engineに設定されていることを確認するには:- Google Cloud コンソール: [セッション テンプレート] ページで、 テンプレートの [**エンジン**] 列を確認します。セッション テンプレートの [名前] をクリックして、セッション テンプレートの詳細ページでこの設定を表示することもできます。
- gcloud CLI:
gcloud beta dataproc session-templates describeコマンドを実行します。 - API:
sessionTemplates.getリクエストを発行します。
インタラクティブ セッション
インタラクティブ セッションのエンジン が
Lightning Engineに設定されていることを確認するには:- Google Cloud コンソール: [インタラクティブ セッション] ページで、 テンプレートの [**エンジン**] 列を確認します。[インタラクティブ セッション ID] をクリックして、セッション テンプレートの詳細ページでこの設定を表示することもできます。
- gcloud CLI:
gcloud beta dataproc sessions describeコマンドを実行します。 - API:
sessions.getリクエストを発行します。
ネイティブ クエリ実行
ネイティブ クエリ実行(NQE)は、Google ハードウェア向けに設計された Apache Gluten と Velox に基づくネイティブな実装によってパフォーマンスを向上させる、Lightning Engine のオプション機能です。
ネイティブ クエリ実行ランタイムには統合メモリ管理が含まれており、既存の Spark 構成を変更することなく、オフヒープ メモリとオンヒープ メモリを動的に切り替えられます。NQE は、演算子、関数、Spark データ型への対応を拡張しているほか、ネイティブ エンジンを活用してオペレーションのプッシュダウンを最適化する機会を自動的に特定するインテリジェンスも備えています。
ネイティブ クエリ実行ワークロードを特定する
次のシナリオでは、ネイティブ クエリ実行を使用します。
Parquet ファイルと ORC ファイルからデータを読み取る Spark Dataframe API、Spark Dataset API、Spark SQL クエリ。出力ファイルの形式は、ネイティブ クエリ実行のパフォーマンスに影響しません。
ネイティブ クエリ実行は、次のデータ型の入力を使用するワークロードではおすすめしません。
- バイト: ORC と Parquet
- タイムスタンプ: ORC
- 構造体、配列、マップ: Parquet
ネイティブ クエリ実行の制限事項
次のシナリオでネイティブ クエリ実行を有効にすると、例外、Spark の非互換性、ワークロードのデフォルトの Spark エンジンへのフォールバックが発生する可能性があります。
フォールバック
次の実行でネイティブ クエリ実行を行うと、ワークロードが Spark 実行エンジンにフォールバックし、回帰または失敗が発生する可能性があります。
ANSI: ANSI モードが有効になっている場合、実行は Spark にフォールバックします。
大文字と小文字を区別するモード: ネイティブ クエリ実行は、Spark のデフォルトの大文字と小文字を区別しないモードのみをサポートしています。大文字と小文字を区別するモードが有効になっている場合、誤った結果が生じる可能性があります。
パーティション分割テーブル スキャン: ネイティブ クエリ実行は、パスにパーティション情報が含まれている場合にのみ、パーティション分割テーブル スキャンをサポートします。それ以外の場合、ワークロードは Spark 実行エンジンにフォールバックします。
互換性のない動作
次の場合にネイティブ クエリ実行を使用すると、互換性のない動作や誤った結果が生じる可能性があります。
JSON 関数: ネイティブ クエリ実行は、単一引用符ではなく二重引用符で囲まれた文字列をサポートします。単一引用符を使用すると、誤った結果が生じます。
get_json_object関数でパスに「*」を使用すると、NULLが返されます。Parquet 読み取り構成:
- ネイティブ クエリ実行では、
spark.files.ignoreCorruptFilesがtrueに設定されている場合でも、デフォルトのfalse値に設定されているとみなされます。 - ネイティブ クエリ実行は
spark.sql.parquet.datetimeRebaseModeInRead, を無視し、Parquet ファイルの内容のみを返します。従来のハイブリッド(ユリウス暦とグレゴリオ暦)と先発グレゴリオ暦の違いは考慮されません。Spark の結果が異なる場合があります。
- ネイティブ クエリ実行では、
NaN: 対象外です。たとえば、数値比較でNaNを使用すると、予期しない結果が生じる可能性があります。Spark カラム型読み取り: Spark カラム型ベクトルはネイティブ クエリ実行と互換性がないため、致命的なエラーが発生する可能性があります。
スピル: シャッフル パーティションが大きな数に設定されている場合、ディスクへのスピル機能により
OutOfMemoryExceptionがトリガーされる可能性があります。この問題が発生した場合は、パーティションの数を減らすことでこの例外を解消できます。