移行ガイド: Spark Core
- 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.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ドライバーは
PersistentVolumnClaim
を所有し、ライブエグゼキューターに割り当てられていない場合は再利用を試みます。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 が寿命を迎え、コミュニティによってサポートされなくなったため、Spark は log4j の依存関係を 1.x から 2.x に移行します。2015 年 8 月以降に log4j 1.x に対して報告された脆弱性はチェックされておらず、修正されません。ユーザーは、log4j2 構文 (XML、JSON、YAML、または properties 形式) を使用して、元の log4j プロパティファイルを書き換える必要があります。Spark は、Spark ディストリビューションに含まれる
conf/log4j.properties.template
を、log4j2 プロパティ形式のconf/log4j2.properties.template
に書き換えます。
Core 3.1 から 3.2 へのアップグレード
-
Spark 3.2 以降、
spark.scheduler.allocation.file
は、パスにスキームがない場合、Hadoop構成を尊重してリモートファイルを読み取ることを意味する、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 ディストリビューションが組み込みの Hadoop と一緒の場合、Spark は、
yarn.application.classpath
およびmapreduce.application.classpath
から Hadoop クラスパスを YARN に送信された Spark アプリケーションに伝播しました。Spark 3.1 以降、Guava や Jackson など、Hadoop クラスターから取得した異なる推移的依存関係による障害を防ぐために、Spark ディストリビューションが組み込みの Hadoop と一緒の場合、伝播しなくなりました。Spark 3.1 より前の動作を復元するには、spark.yarn.populateHadoopClasspath
をtrue
に設定できます。
Core 2.4 から 3.0 へのアップグレード
-
org.apache.spark.ExecutorPlugin
インターフェースと関連する構成は、新しい機能を追加するorg.apache.spark.api.plugin.SparkPlugin
に置き換えられました。古いインターフェースを使用するプラグインは、新しいインターフェースを拡張するように変更する必要があります。詳細については、モニタリングガイドを確認してください。 -
非推奨のメソッド
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: <number>
のようなメッセージでエラーが発生する可能性があります。 -
SPARK_WORKER_INSTANCES
はスタンドアロンモードで非推奨になりました。ノードごとに複数のワーカーを起動し、ワーカーごとに1つのエグゼキューターを起動するのではなく、1つのワーカーで複数のエグゼキューターを起動し、ノードごとに1つのワーカーを起動することをお勧めします。