このページでは、 Google Cloud Serverless for Apache Spark に関するよくある質問とその回答を紹介します。
Compute Engine 上の Dataproc ではなく Serverless for Apache Spark を使用すべき場合とはどのようなときですか?
Apache Spark 用 Serverless:
- PySpark カーネル Jupyter ノートブックで Spark バッチ ワークロードとインタラクティブ セッションをサポートします。
- Apache Spark 用 Serverless は、ワークロードとインタラクティブなセッション インフラストラクチャを作成、管理します。
Compute Engine 上の Dataproc:
さまざまなタイプの Spark ジョブと、Flink、Hadoop、Hive、Pig、Presto などの他のオープンソース コンポーネントに基づくジョブの送信をサポートします。
インフラストラクチャの作成と管理は行いません。Dataproc クラスタを作成して管理します。
Serverless for Apache Spark では何ができますか?
サーバーレス バッチとインタラクティブ ノートブックのセッションに Dataproc JupyterLab プラグインを使用する。
Spark ストリーミング ライブラリを使用してストリーミング ジョブを実行します。注: ストリーミングはマネージド サービスではないため、チェックポイントと再起動を管理する必要があります。
Spark MLlib を使用してモデルをトレーニングする。
インタラクティブな SQL ノートブックを使用して、データ探索、グラフ、時系列、地理空間分析を行います。
Apache Airflow のマネージド サービスである Cloud Composer を使用して、Serverless for Apache Spark ワークロードをオーケストレートする。
ワークロードの実行プランはどのように設定すればよいですか?
ワークロードは、同時または順番に実行できます。実行プランは Google Cloud リソース割り当てに影響します。バッチリソースの割り当てで許可されている数のワークロードを並行して実行できます。
Serverless for Apache Spark でカスタム イメージを使用できますか?
- はい。デフォルトのコンテナ イメージの代わりにカスタム コンテナ イメージを使用できます。Serverless for Apache Spark でカスタム コンテナを使用するをご覧ください。
Apache Spark 用 Serverless の Spark ワークロードにメモリリソースとディスク リソースを指定できますか?
はい。プレミアム エグゼキュータとドライバのコンピューティングおよびディスク階層と、ワークロードの送信時に割り当てるドライバとエグゼキュータのコンピューティング リソースとディスク リソースの量を指定できます(リソース割り当てプロパティを参照)。
Serverless for Apache Spark VPC ネットワークの IP アドレス範囲を指定するにはどうすればよいですか?
Apache Spark ワークロード用のサーバーレスは、環境内で実行されます。Serverless Spark ワークロードの各 Spark ドライバと Spark エグゼキュータは、Apache Spark 用サーバーレス VPC ネットワークの 1 つの内部 IP アドレスを消費します。/16
は、Apache Spark 用サーバーレス VPC ネットワークの一般的なユーザー指定 CIDR アドレス範囲です。実行する予定の同時実行ワークロードの数に基づいて、ネットワークの IP アドレス範囲を制限できます。
Apache Spark 用 Serverless はデータ所在地をサポートしていますか?
はい。ワークロードが処理されるリージョンを指定します。指定したリージョンで入出力データセットを特定します。
Serverless for Apache Spark は、ワークロードを実行するために、指定したリージョン内のゾーンをどのように選択しますか?
Serverless for Apache Spark は、容量と可用性に基づいてワークロードを実行する Compute Engine ゾーンを選択します。ワークロードの開始後にゾーンが使用できなくなると、ワークロードは失敗します。失敗したワークロードを再送信する必要があります。
Apache Spark 向けサーバーレス ワークロードでは、コンピューティング リソースをどのように使用しますか?
各ワークロードは独自のコンピューティング リソースで実行されます。複数のバッチ送信でコンピューティング リソースが共有または再利用されることはありません。
ベスト プラクティス:
短時間実行ジョブではなく、中時間実行ジョブに合わせてワークロードを最適化します。
Cloud Storage の複数のワークロードがアクセスするデータを保持します。
Serverless for Apache Spark のお知らせ、機能、バグの修正、既知の問題、非推奨に関する情報はどこで確認できますか?
Apache Spark 用 Serverless のリリースノートをご覧ください。
同時実行ワークロードはリソースと競合しますか?
Apache Spark 用 Serverless ワークロードは、同時に実行されるすべてのワークロードを実行するのにリソースの割り当てが不十分な場合にのみ、リソースに対して競合します。それ以外の場合、ワークロードは互いに完全に分離されます。
Apache Spark 用 Serverless の割り当てはどのように割り当てられますか?
Apache Spark バッチ用のサーバーレスは、 Google Cloud リソースを消費します。詳細については、Dataproc Serverless の割り当てをご覧ください。
Dataproc の永続的履歴サーバーを設定する必要はありますか?
Apache Spark 用 Serverless で使用する永続履歴サーバー(PHS)の設定はオプションです。PHS を使用して、指定した Cloud Storage バケット内の Spark イベントやその他のログを、標準の Apache Spark 用 Serverless のステージング バケットと一時バケットの 90 日間の保持期間(TTL)が経過した後に最大限表示できます。
Apache Spark 用 Serverless でどのような Spark ログを利用できますか?
Spark エグゼキュータとドライバのログは、Spark ワークロードの実行中と実行後に Cloud Logging で使用できます。また、Spark アプリケーションはワークロードの実行中に永続的履歴サーバー(PHS)のウェブ インターフェースに表示されます(PHS の UI で PHS > 不完全なアプリケーションを選択)。
Dataproc PHS を設定すると、Cloud Storage に保存されている Spark イベントログに永続的にアクセスできます。このログは、Spark アプリケーションの実行に関する有益な情報(DAG、エグゼキュータ イベントなど)を提供します。
Spark ワークロードのエグゼキュータ数を設定できますか?
はい。spark.executor.instances
プロパティを使用して、Spark ワークロードのエグゼキュータの数を設定できます。ただし、Spark はコアごとに 1 つのタスクを実行するため、ワークロードが使用できるコアの合計数がエグゼキュータの数よりも重要です。たとえば、ワークロードにそれぞれ 2 つのコアを持つ 4 つのエグゼキュータがある場合、4 * 2 = 8
タスクを同時に実行します。また、それぞれ 4 つのコアを持つ 2 つのエグゼキュータがあるワークロードに対して、同じ数のタスクを実行します。各ワークロードのコア数は同じであるため、実行されるタスクの数も同じになります。spark.executor.cores
プロパティを使用して、Apache Spark ワークロードのエグゼキュータあたりのコア数を設定できます。
Serverless for Apache Spark での自動スケーリングに使用される Spark 指標にはどのようなものがありますか?
Apache Spark 用サーバーレスは、maximum-needed
と running
の Spark の動的割り当て指標を調べて、スケールアップまたはスケールダウンするかどうかを決定します。Apache Spark 用 Serverless の自動スケーリングをご覧ください。
Spark プロパティを使用して、Serverless for Apache Spark 自動スケーリングの動作を構成できますか?
はい。Apache Spark 用サーバーレスの自動スケーリングは Spark の動的割り当てに基づいており、デフォルトで有効になっています。次の Spark プロパティと Spark 動的割り当てプロパティを調整できます。
spark.executor.instances
spark.dynamicAllocation.initialExecutors
spark.dynamicAllocation.minExecutors
spark.dynamicAllocation.maxExecutors
Spark ワークロードを送信するためにコードを JAR ファイルにパッケージ化する必要があるのはなぜですか?
Spark は Scala で記述されているため、ドライバ プロセスとワーカー プロセスはどちらも JVM プロセスとして動作します。JVM 言語では、JAR ファイルはコードをパッケージ化する主な方法です。ワークロードを送信するときに、JAR ファイルを Apache Spark 向け Serverless に渡します。