移行ガイド:Spark Core
- Core 3.5 から 4.0 へのアップグレード
- Core 3.5.3 から 3.5.4 へのアップグレード
- Core 3.4 から 3.5 へのアップグレード
- Core 3.3 から 3.4 へのアップグレード
- Core 3.2 から 3.3 へのアップグレード
- Core 3.1 から 3.2 へのアップグレード
- Core 3.0 から 3.1 へのアップグレード
- Core 2.4 から 3.0 へのアップグレード
Core 3.5 から 4.0 へのアップグレード
-
Spark 4.0 以降、Spark はサーブレット API の内部参照をすべて `javax` から `jakarta` に移行しました。
-
Spark 4.0 以降、Spark はイベントログを増分アーカイブするためにロールします。Spark 4.0 より前の動作を復元するには、`spark.eventLog.rolling.enabled` を `false` に設定できます。
-
Spark 4.0 以降、Spark はイベントログを圧縮します。Spark 4.0 より前の動作を復元するには、`spark.eventLog.compress` を `false` に設定できます。
-
Spark 4.0 以降、Spark ワーカーは定期的にワーカーおよび停止したアプリケーションのディレクトリをクリーンアップします。Spark 4.0 より前の動作を復元するには、`spark.worker.cleanup.enabled` を `false` に設定できます。
-
Spark 4.0 以降、`spark.shuffle.service.db.backend` はデフォルトで `ROCKSDB` に設定されており、Spark はシャッフルサービスに RocksDB ストアを使用します。Spark 4.0 より前の動作を復元するには、`spark.shuffle.service.db.backend` を `LEVELDB` に設定できます。
-
Spark 4.0 では、リソースマネージャーとしての Apache Mesos のサポートが削除されました。
-
Spark 4.0 以降、Spark はエグゼキュータポッドをバッチサイズ 10 で割り当てます。レガシー動作を復元するには、`spark.kubernetes.allocation.batch.size` を 5 に設定できます。
-
Spark 4.0 以降、Spark は永続ボリュームクレームで `ReadWriteOnce` の代わりに `ReadWriteOncePod` アクセスモードを使用します。レガシー動作を復元するには、`spark.kubernetes.legacy.useReadWriteOnceAccessMode` を `true` に設定できます。
-
Spark 4.0 以降、Spark はそのエグゼキュータポッドのステータスを、そのポッドのすべてのコンテナをチェックして報告します。レガシー動作を復元するには、`spark.kubernetes.executor.checkAllContainers` を `false` に設定できます。
-
Spark 4.0 以降、Spark は既存システムと Apache Ivy の非互換性を分離するために、デフォルトで Ivy ユーザーディレクトリとして `~/.ivy2.5.2` を使用します。レガシー動作を復元するには、`spark.jars.ivy` を `~/.ivy2` に設定できます。
-
Spark 4.0 以降、Spark は、シャッフルが不要になった非割り当て済みエグゼキュータのシャッフルブロックを削除するために、外部シャッフルサービスを使用します。レガシー動作を復元するには、`spark.shuffle.service.removeShuffle` を `false` に設定できます。
-
Spark 4.0 以降、Spark ログ内の Spark タスク名に対する MDC (Mapped Diagnostic Context) キーが `mdc.taskName` から `task_name` に変更されました。`mdc.taskName` キーを使用するには、`spark.log.legacyTaskNameMdc.enabled` を `true` に設定できます。
-
Spark 4.0 以降、Spark は `spark.speculation.multiplier=3` と `spark.speculation.quantile=0.9` を使用して、投機的実行をあまり積極的に行いません。レガシー動作を復元するには、`spark.speculation.multiplier=1.5` と `spark.speculation.quantile=0.75` に設定できます。
-
Spark 4.0 以降、`spark.shuffle.unsafe.file.output.buffer` は非推奨ですが、引き続き機能します。代わりに `spark.shuffle.localDisk.file.output.buffer` を使用してください。
-
Spark 4.0 以降、ファイルを読み込む際に `org.apache.hadoop.security.AccessControlException` および `org.apache.hadoop.hdfs.BlockMissingException` にヒットした場合、`spark.files.ignoreCorruptFiles` が `true` に設定されていても、例外がスローされタスクは失敗します。
Core 3.5.3 から 3.5.4 へのアップグレード
- Spark 3.5.4 以降、ファイルを読み込む際に `org.apache.hadoop.security.AccessControlException` および `org.apache.hadoop.hdfs.BlockMissingException` にヒットした場合、`spark.files.ignoreCorruptFiles` が `true` に設定されていても、例外がスローされタスクは失敗します。
Core 3.4 から 3.5 へのアップグレード
-
Spark 3.5 以降、`spark.yarn.executor.failuresValidityInterval` は非推奨です。代わりに `spark.executor.failuresValidityInterval` を使用してください。
-
Spark 3.5 以降、`spark.yarn.max.executor.failures` は非推奨です。代わりに `spark.executor.maxNumFailures` を使用してください。
Core 3.3 から 3.4 へのアップグレード
-
Spark 3.4 以降、Spark ドライバーは `PersistentVolumeClaim` を所有し、ライブエグゼキュータに割り当てられていない場合は再利用しようとします。Spark 3.4 より前の動作を復元するには、`spark.kubernetes.driver.ownPersistentVolumeClaim` を `false` に、`spark.kubernetes.driver.reusePersistentVolumeClaim` を `false` に設定できます。
-
Spark 3.4 以降、Spark ドライバーは、シャッフルサービスなしで動的割り当てが有効になっている場合にシャッフルデータを追跡します。Spark 3.4 より前の動作を復元するには、`spark.dynamicAllocation.shuffleTracking.enabled` を `false` に設定できます。
-
Spark 3.4 以降、`spark.decommission.enabled` と `spark.storage.decommission.enabled` の両方が true の場合、Spark はキャッシュされた RDD およびシャッフルブロックを非アクティブ化しようとします。Spark 3.4 より前の動作を復元するには、`spark.storage.decommission.rddBlocks.enabled` と `spark.storage.decommission.shuffleBlocks.enabled` の両方を `false` に設定できます。
-
Spark 3.4 以降、`spark.history.store.hybridStore.enabled` が true の場合、Spark は RocksDB ストアを使用します。Spark 3.4 より前の動作を復元するには、`spark.history.store.hybridStore.diskBackend` を `LEVELDB` に設定できます。
Core 3.2 から 3.3 へのアップグレード
- Spark 3.3 以降、log4j 1.x が EOL に達し、コミュニティによるサポートが停止したため、Spark は log4j の依存関係を 1.x から 2.x に移行しました。2015 年 8 月以降に log4j 1.x に対して報告された脆弱性はチェックされておらず、修正されません。ユーザーは、元の log4j プロパティファイルを log4j2 の構文 (XML、JSON、YAML、またはプロパティ形式) を使用して書き換える必要があります。Spark は、Spark ディストリビューションに含まれている `conf/log4j.properties.template` を、log4j2 プロパティ形式で `conf/log4j2.properties.template` に書き換えます。
Core 3.1 から 3.2 へのアップグレード
-
Spark 3.2 以降、`spark.scheduler.allocation.file` は Hadoop ファイルシステムを使用してリモートファイルを読み取ることをサポートしています。これは、パスにスキームがない場合、Spark が Hadoop の設定を尊重して読み取ることを意味します。Spark 3.2 より前の動作を復元するには、`spark.scheduler.allocation.file` にローカルスキームを指定できます。例:`file:///path/to/file`。
-
Spark 3.2 以降、`spark.hadoopRDD.ignoreEmptySplits` はデフォルトで `true` に設定されており、Spark は空の入力スプリットに対して空のパーティションを作成しません。Spark 3.2 より前の動作を復元するには、`spark.hadoopRDD.ignoreEmptySplits` を `false` に設定できます。
-
Spark 3.2 以降、`spark.eventLog.compression.codec` はデフォルトで `zstd` に設定されており、Spark は `spark.io.compression.codec` を使用してフォールバックしなくなります。
-
Spark 3.2 以降、`spark.storage.replication.proactive` はデフォルトで有効になっており、Spark はエグゼキュータの障害によるキャッシュされた RDD ブロックレプリカの損失の場合に補充しようとします。Spark 3.2 より前の動作を復元するには、`spark.storage.replication.proactive` を `false` に設定できます。
-
Spark 3.2 では、`spark.launcher.childConectionTimeout` は非推奨 (タイポ) ですが、引き続き機能します。代わりに `spark.launcher.childConnectionTimeout` を使用してください。
-
Spark 3.2 では、リソースマネージャーとしての Apache Mesos のサポートは非推奨となり、将来のバージョンで削除される予定です。
-
Spark 3.2 では、Spark はアプリケーションが自身で終了したときに K8s ドライバーサービスリソースを削除します。Spark 3.2 より前の動作を復元するには、`spark.kubernetes.driver.service.deleteOnTermination` を `false` に設定できます。
Core 3.0 から 3.1 へのアップグレード
-
Spark 3.0 以前では、`SparkContext` はエグゼキュータで作成できました。Spark 3.1 以降、エグゼキュータで `SparkContext` を作成すると例外がスローされます。エグゼキュータで `SparkContext` を作成する際に、設定 `spark.executor.allowSparkContext` を設定することで許可できます。
-
Spark 3.0 以前では、Spark は YARN に送信される Spark アプリケーションに Hadoop クラスパスを `yarn.application.classpath` および `mapreduce.application.classpath` から伝播していました。Spark 3.1 以降、Spark ディストリビューションに組み込み Hadoop が含まれている場合、Hadoop クラスターから取得される Guava や Jackson などの異なる推移的依存関係による失敗を防ぐため、伝播しなくなりました。Spark 3.1 より前の動作を復元するには、`spark.yarn.populateHadoopClasspath` を `true` に設定できます。
Core 2.4 から 3.0 へのアップグレード
-
`org.apache.spark.ExecutorPlugin` インターフェースと関連する設定は、新しい機能を追加する `org.apache.spark.api.plugin.SparkPlugin` に置き換えられました。古いインターフェースを使用するプラグインは、新しいインターフェースを拡張するように変更する必要があります。詳細については、Monitoring ガイドを確認してください。
-
非推奨となっていたメソッド `TaskContext.isRunningLocally` が削除されました。ローカル実行は削除され、常に `false` を返していました。
-
`ShuffleWriteMetrics` の非推奨となっていたメソッド `shuffleBytesWritten`、`shuffleWriteTime`、`shuffleRecordsWritten` が削除されました。代わりに、それぞれ `bytesWritten`、`writeTime`、`recordsWritten` を使用してください。
-
`AccumulableInfo.apply` の非推奨となっていたメソッドは、`AccumulableInfo` の作成が許可されないため削除されました。
-
非推奨となっていたアキュムレータ v1 API が削除されました。v2 API を使用してください。
-
イベントログファイルは UTF-8 エンコーディングで書き込まれ、Spark History Server はイベントログファイルを UTF-8 エンコーディングで再生します。以前は Spark はデフォルトの JVM プロセスの文字セットでイベントログファイルを書き込んでいたため、Spark 2.x の Spark History Server は、エンコーディングの互換性がない場合に古いイベントログファイルを読み取るために必要です。
-
シャッフルブロックを取得するための新しいプロトコルが使用されます。Spark 3.0 アプリを実行する際には、外部シャッフルサービスをアップグレードすることが推奨されます。設定 `spark.shuffle.useOldFetchProtocol` を `true` に設定することで、古い外部シャッフルサービスを引き続き使用できます。それ以外の場合、Spark は `IllegalArgumentException: Unexpected message type:
` のようなメッセージでエラーが発生する可能性があります。 -
スタンドアロンモードでは、`SPARK_WORKER_INSTANCES` は非推奨です。ノードごとに 1 つのワーカーを起動するのではなく、1 つのワーカーで複数のエグゼキュータを起動し、ノードごとに 1 つのワーカーを起動することが推奨されます。