web-dev-qa-db-ja.com

Spark DStreamsのストリーミングチェックポイント

Sparkストリーミングでは、ステートフル操作を使用する場合は必須)StreamingContextを設定して、信頼できるデータストレージ(S3、HDFS、 ...)の(AND):

  • メタデータ
  • DStream系統

説明したように ここ 、出力データストレージを設定するには、yourSparkStreamingCtx.checkpoint(datastoreURL)を呼び出す必要があります

一方、checkpoint(timeInterval)を呼び出すだけで、各DataStreamの系統チェックポイント間隔を設定できます。実際、系統チェックポイントの間隔は、DataStreamのスライド間隔の5〜10倍に設定することをお勧めします。

dstream.checkpoint(checkpointInterval)。通常、DStreamの5〜10のスライド間隔のチェックポイント間隔を試すのが適切な設定です。

私の質問は:

ストリーミングコンテキストがチェックポイントを実行するように設定されていて、no ds.checkpoint(interval)が呼び出された場合、すべてのデータストリームに対してリネージチェックポイントが有効になっていますデフォルトのcheckpointIntervalbatchIntervalと等しい?それとも、逆に、何が有効になっているかをチェックポイントするメタデータのみですか?

チェックSparkコード(v1.5)DStreamsのチェックポイントが2つの状況で有効になっていることがわかりました。

checkpointメソッドの明示的な呼び出しによる(StreamContextではない):

/**
* Enable periodic checkpointing of RDDs of this DStream
* @param interval Time interval after which generated RDD will be checkpointed
*/
def checkpoint(interval: Duration): DStream[T] = {
    if (isInitialized) {
        throw new UnsupportedOperationException(
            "Cannot change checkpoint interval of an DStream after streaming context has started")
    }
    persist()
    checkpointDuration = interval
    this
}

具体的な 'DStream'サブクラスがDStream属性をオーバーライドしている限り(mustCheckpointの初期化時)(trueに設定):

 private[streaming] def initialize(time: Time) {
  ...
  ...   
   // Set the checkpoint interval to be slideDuration or 10 seconds, which ever is larger
   if (mustCheckpoint && checkpointDuration == null) {
     checkpointDuration = slideDuration * math.ceil(Seconds(10) / slideDuration).toInt
     logInfo("Checkpoint interval automatically set to " + checkpointDuration)
   }
  ...

最初のケースは明らかです。 Sparkストリーミングコードでナイーブ分析を実行する:

grep "val mustCheckpoint = true" $(find -type f -name "*.scala")

> ./org/Apache/spark/streaming/api/python/PythonDStream.scala:  override     val mustCheckpoint = true
>./org/Apache/spark/streaming/dstream/ReducedWindowedDStream.scala:  override val mustCheckpoint = true
>./org/Apache/spark/streaming/dstream/StateDStream.scala:  override val mustCheckpoint = true

一般に(PythonDStreamを無視して)、StreamingContextチェックポイントは、StateDStreamおよびReducedWindowedDStreamインスタンスの系統チェックポイントのみを有効にすることがわかります。これらのインスタンスは、変換の結果です(それぞれ、AND)。

  • pdateStateByKey:つまり、複数のウィンドウを介して状態を提供するストリーム。
  • reduceByKeyAndWindow