データ処理解析の最初に、原則
我々は間隔を設定するたびにバッチは、分裂の最後のバッチの時点から、これまでのブロック間隔で時間間隔バッチバッチとしてパッケージ化されているReceiverTrackerを行ってきました。
第二に、バッチ内で、この時点でパッケージいくつかのブロックは、このバッチで表す初期RDDを作成するには、バッチからのデータはRDDに対応するいくつかのパーティションを持っています。
RDD対応するパーティションのこのバッチデータ処理段階の並列処理は、この関係を持つ偉大な曲の度合いを判断しますが、データ処理ステージのパフォーマンスを向上させたい場合は、並列度を増やすことを検討しては、ブロックの間隔を短く検討します。
generatorJob()メソッド、データ処理ステージを定義ForEachStreamを、使用される唯一の出力動作は、データは、バッチのデータを処理するために、小さなトリガージョブのバッチを受けるのみに対してトリガ。
最後のステップは、すなわち、対応するバッチRDD jobschedulerのスケジューリング入力RDDジョブ、ジョブを検索します。
第二に、ソースコード解析
入口、JobGenerator generateJobs()メソッド
### org.apache.spark.streaming.scheduler / JobGenerator.scala / ** *タイミングスケジュールgenerateJobs()メソッド、バッチインターバル期間内に、実際には、時間内に通過 * / プライベートデフgenerateJobs(時間:時間){ // そのジョブの生成コードは、環境にアクセスできるよう、このスレッドでSparkEnvを設定 // 例:BlockRDDsは、このスレッドで作成され、それがBlockManagerにアクセスする必要があるされている // 更新日: SparkEnvでThreadLocalのものが除去された後にこれはおそらく冗長です。 SparkEnv.set(ssc.env) {お試しください // 見つけReceiverTracker、バッチの現在の期間のブロックを割り当てるために、そのallocateBlocksToBatchメソッドを呼び出し、その // RDD作成 jobScheduler.receiverTracker.allocateBlocksToBatch(時間)// BATCHに受信したブロックを割り当てる // DSteamGraph呼び出しをgenerateJobs()プログラムによれば、オペレータ間の依存関係を定義しDSteamジョブ生成 graph.generateJobs(時間)//を使用するジョブは、ブロック割り当て発生 }一致{ // 成功した場合、ジョブ作成 ケース成功(ジョブ)=>を // ReceiverTrackerから、データブロックに対応する現在のバッチ間隔取得 =ヴァルreceivedBlockInfosを jobScheduler.receiverTracker.getBlocksOfBatch(時間).mapValues {_.toArray} // jobschedulerのでジョブを提出し、それに対応する元のデータは一括ブロックである jobScheduler.submitJobSet(JobSet(時間、ジョブズ、receivedBlockInfos)) ケースの失敗(E)=> jobScheduler.reportError(「ジョブの生成時のエラー」+ 時間、E) } eventActor!DoCheckpoint(時間) }