Spark動的割当ておよびSpark構造化ストリーミング
Spark動的割当て機能は、Sparkおよびそのソース・コードの一部です。データ・フローはSparkからのシグナルをモニタリングし、リソースの請求を適切に行い、スケジューリングすることで、このアルゴリズムの機能をサポートします。
Sparkには、動的割当ての実装が複数あります:
- 公式アルゴリズムである
spark.dynamicAllocation
に記載されています。バッチ・ジョブ用に設計されていますが、このアルゴリズムは、バッチおよびSpark構造化ストリーミングと互換性があります。Sparkストリーミングと互換性がありません。 spark.streaming.dynamicAllocation
で、これは非公式です。この動的割当てはSparkストリーミング用に設計されています。spark.streaming.dynamicAllocation
を使用する場合は、spark.dynamicAllocation
を無効にしてください。- Spark構造化ストリーミング用に、特別に設計された実装はありません。Spark機能リクエストは、SPARK-24815です。
spark.dynamicAllocation.enabled
はSpark Structured Streamingで使用できますが、ジョブ・パターンのストリーミング用に設計されておらず、特定のアプリケーションに対して適切に機能しません。spark.dynamicAllocation.enabled
はジョブ・キューをモニターし、キューに基づいてスケーリングの決定を行いますが、ストリーミングの性質(トリガー・ケイデンス、タスク・ケイデンス、平均タスク実行時間など)は考慮しません。規則性なく過剰な割当てが行われたり、割当てが解除されたりする可能性があります。spark.dynamicAllocation
のタイムアウト値を調整すると、ストリーミング・アプリケーション用にチューニングできます。
spark.dynamicAllocation
実装の詳細は、ソース・コードのコメントを参照してください。