グルテン・アクセラレーション・スパーク・エンジンの紹介
グルテン・アクセル・スパーク・エンジンは、 watsonx.data に最適化された高性能エンジンである。 Sparkエンジンは、SQLの実行をオープンソースの実行エンジンであるVelox(C++で実装されている)にオフロードするためにGlutenを使用し、それによってワークロードの実行コストを削減するために SparkSQL。
Glutenは、Spark SQLフレームワークの高いスケーラビリティとネイティブエンジンの優れたパフォーマンスを活用し、ネイティブエンジンと SparkSQL, を統合することで、Spark SQLと DataFrame のワークロードを高速化するように設計されたネイティブエンジンプラグインとして機能します。 Apache Spark APIと完全に互換性があるため、コードの変更は必要ない。
グルテン加速スパークエンジンの特徴
-
対応ファイル形式 Apache Parquet および Apache Avro。
-
テーブルスキャンのパフォーマンスが向上しました。
-
結合と集約により大規模なSQLクエリを高速化。
-
Delta、Hudi、Iceberg、 Hive のカタログに対応。
-
UPDATE、DELETE、MERGE INTO、INSERT、CREATE TABLE AS SELECTを使用したDeltaとParquetの書き込みの高速化。
-
デフォルトでは、ソートマージ結合をハッシュ結合に置き換えます。
制限
-
Amazon S3 オブジェクトストアを使用すると、アプリケーションの送信にDASをサポートしますが、ADLSやGCSのような他のオブジェクトストアは、明示的な資格情報を渡す必要があります。
-
小さなクエリは高速化されない。
-
カタログの関連付けは、 s3 オブジェクトストアでのみサポートされています。
-
JVMへのフォールバック
-
ANSI: Glutenは現在ANSIモードをサポートしていません。 ANSIが有効な場合、Sparkプランの実行は常にバニラSparkにフォールバックします。
-
FileSource フォーマットをサポートしている:現在、GlutenはParquetファイル形式のみをサポートし、ORCを部分的にサポートしています。 他のフォーマットが使用された場合、スキャンオペレーターはバニラスパークに戻る。
-
-
相容れない行動
-
JSON関数:Veloxは、JSONデータではシングルクォートではなく、ダブルクォートで囲まれた文字列のみをサポートしています。 シングルクォートを使用すると、Glutenは正しくない結果を与える。
-
Parquetの読み込み設定:Glutenは
spark.files.ignoreCorruptFiles、デフォルトfalseをサポートしています。trueの場合、falseの設定と同じ動作になります。 グルテンはspark.sql.parquet.datetimeRebaseModeInReadを無視し、パーケットファイルに書かれたものだけを返す。 レガシー・ハイブリッド暦(ユリウス・グレゴリオ暦)とプロレプティック・グレゴリオ暦の違いは考慮されていない。 バニラ・スパークでは結果は異なるかもしれない。 -
パーケット書き込み設定:Sparkは、
spark.sql.parquet.datetimeRebaseModeInWrite、日付/タイムスタンプのパーケット書き込み時に、従来のハイブリッド(ユリウス暦+グレゴリオ暦)カレンダーとプロレプティック・グレゴリオ暦のどちらを使用するかを決定する設定を備えています。 読み込むParquetがこの設定をtrueにしてSparkによって書き込まれた場合、Veloxの TableScan、それを読み返す際に異なる結果が出力されます。
-
-
漏れ
OutOfMemoryException 現在のspill-to-disk機能の実装では、シャッフル・パーティションが大きな数に設定されている場合、まだトリガーされる可能性がある。 このような場合は、パーティション数を減らしてOOMを解消してください。
-
CSV読み込み
-
ヘッダーオプションはtrueでなければならない。 そして現在、 DatasourceV1 のみをサポートしている。つまり、ユーザーは spark.sql.sources.useV1SourceList=csv を設定する必要がある。 ユーザー定義の読み取りオプションはサポートされていないため、ほとんどの場合、CSV読み取りはバニラSparkにフォールバックする。 CSVの読み込みもバニラSparkにフォールバックし、ユーザーが指定したスキーマがファイルスキーマと異なる場合に警告をログに記録する。
-
グルテンの制限の詳細については、 制限を 参照のこと。
-
-
Glutenは、FIPS対応環境ではサポートされていません。
グルテンのベストプラクティス
-
Glutenは、JVMのヒープ制限を超えることなく大規模なデータ処理を行うために不可欠な、 Apache Arrow の OffHeap カラムナーフォーマットを使用するネイティブバックエンド、すなわちVeloxと統合するため、大規模な OffHeap メモリを必要とする。
-
十分な offHeap メモリが提供されていない場合、OOM の可能性がある(「 制限事項 」を参照)。 従って、デフォルトでは、エクゼキュータ・メモリの75%が offHeap。
-
ユーザーは、
ae.spark.offHeap.factorというコンフィギュレーションを使って、 offHeap, に設定されるメモリのパーセンテージを調整することができる。このコンフィギュレーションは、 0.75 のように、排他的な値(0~1)を受け付ける。 -
Java ベースのスパークへのフォールバックが多いワークロードでは、この値をより低い値、すなわち < 0.5 に設定することを推奨する。( 制限を 参照)これにより、 Java ベースのスパーク実行へのフォールバック中にOOMが発生しなくなります。
-
ワークロードがフォールバックなしでグルテン上でネイティブに実行される場合は、 0.75 以上の値を設定することを推奨する。
デフォルトでは 0.75 が設定されている。