移行ガイド: Structured Streaming
この移行ガイドはStructured Streamingに固有の項目について説明しています。Structured Streamingをより新しいバージョンに移行する際には、SQL移行の多くの項目が適用できます。詳細は移行ガイド:SQL、Datasets、DataFrameを参照してください。
Structured Streaming 3.5から4.0へのアップグレード
- Spark 4.0以降、クエリ内のいずれかのソースが
Trigger.AvailableNowをサポートしていない場合、Sparkは単一バッチ実行にフォールバックします。これは、ソースとラッパー実装間の互換性の問題による、正確性、重複、およびデータ損失の可能性を回避するためです。(詳細はSPARK-45178を参照してください。) - Spark 4.0以降、新しい設定
spark.sql.streaming.ratioExtraSpaceAllowedInCheckpoint(デフォルト:0.3)は、メンテナンスタスク内でのバッチ削除のために古いバージョンのファイルを格納するためにチェックポイントディレクトリで許可される追加スペースの量を制御します。これは、クラウドストアでのリスト操作のコストを償却するためです。これを0に設定すると、古い動作がデフォルトになります。(詳細はSPARK-48931を参照してください。) - Spark 4.0以降、
DataStreamWriterでデータをファイルに出力するために相対パスが使用される場合、絶対パスへの解決はSpark Driverで行われ、Spark Executorに遅延されません。これは、Structured Streamingの動作をDataFrame API(DataFrameWriter)と一致させるためです。(詳細はSPARK-50854を参照してください。) - Spark 4.0以降、非推奨となっていた設定
spark.databricks.sql.optimizer.pruneFiltersCanPruneStreamingSubplanが削除されました。(詳細はSPARK-51187を参照してください。)
Structured Streaming 3.3から3.4へのアップグレード
-
Trigger.OnceはSpark 3.4以降非推奨となり、ユーザーはTrigger.OnceからTrigger.AvailableNowへの移行が推奨されます。詳細はSPARK-39805を参照してください。 -
Spark 3.4以降、Kafkaオフセットフェッチングの設定(
spark.sql.streaming.kafka.useDeprecatedOffsetFetching)のデフォルト値がtrueからfalseに変更されました。デフォルトではコンシューマーグループベースのスケジューリングに依存しなくなり、必要なACLに影響します。詳細については、Structured Streaming Kafka Integrationを参照してください。
Structured Streaming 3.2から3.3へのアップグレード
- Spark 3.3以降、すべてのステートフルオペレーターは正確なグループ化キーによるハッシュパーティショニングを必要とします。以前のバージョンでは、ストリーム-ストリーム結合を除くすべてのステートフルオペレーターは緩やかなパーティショニング基準を必要とし、正確性の問題の可能性を開いていました。(詳細はSPARK-38204を参照してください。)後方互換性を確保するため、古いバージョンから構築されたチェックポイントで古い動作を維持します。
Structured Streaming 3.0から3.1へのアップグレード
-
Spark 3.0以前では、現在のウォーターマークプラス許容遅延レコード数よりも古い行を出力できるステートフル操作を持つクエリで、「ダウンストリームステートフル操作における遅延行」となり、これらの行が破棄される可能性がある場合、Sparkは警告メッセージのみを表示していました。Spark 3.1以降、Sparkはこのような正確性の問題の可能性のあるクエリをチェックし、デフォルトで`AnalysisException`をスローします。正確性の問題のリスクを理解し、それでもクエリを実行することを決定したユーザーは、設定
spark.sql.streaming.statefulOperator.checkCorrectness.enabledをfalseに設定して、このチェックを無効にしてください。 -
Spark 3.0以前では、Sparkはオフセットフェッチングに
KafkaConsumerを使用していましたが、これがドライバで無限待機を引き起こす可能性がありました。Spark 3.1では、新しい設定オプションspark.sql.streaming.kafka.useDeprecatedOffsetFetching(デフォルト:true)が追加され、これをfalseに設定することで、SparkがAdminClientを使用した新しいオフセットフェッチングメカニズムを使用できるようになりました。詳細については、Structured Streaming Kafka Integrationを参照してください。
Structured Streaming 2.4から3.0へのアップグレード
-
Spark 3.0では、
spark.readStream(...)を介してtext、json、csv、parquet、orcなどのファイルベースのデータソースが使用される場合、Structured StreamingはソーススキーマをNULL可能に強制します。以前はソーススキーマのNULL可能性を尊重していましたが、デバッグが困難なNPEの問題が発生していました。以前の動作を復元するには、spark.sql.streaming.fileSource.schema.forceNullableをfalseに設定してください。 -
Spark 3.0は、ストリーム-ストリーム外部結合の正確性の問題を修正し、状態のスキーマを変更しました。(詳細はSPARK-26154を参照してください)。Spark 2.xから構築されたチェックポイント(ストリーム-ストリーム外部結合を使用)からクエリを開始する場合、Spark 3.0はクエリを失敗させます。出力を再計算するには、チェックポイントを破棄して以前の入力を再再生してください。
-
Spark 3.0では、非推奨となっていたクラス
org.apache.spark.sql.streaming.ProcessingTimeが削除されました。代わりにorg.apache.spark.sql.streaming.Trigger.ProcessingTimeを使用してください。同様に、org.apache.spark.sql.execution.streaming.continuous.ContinuousTriggerはTrigger.Continuousに取って代わられて削除され、org.apache.spark.sql.execution.streaming.OneTimeTriggerはTrigger.Onceに取って代わられて非表示になりました。