66、スパークストリーミングデータ処理および分析原理ソースコード解析(ブロック及びバッチ関係徹底的な分析)

データ処理解析の最初に、原則

画像


我々は間隔を設定するたびにバッチは、分裂の最後のバッチの時点から、これまでのブロック間隔で時間間隔バッチバッチとしてパッケージ化されている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)
    }
    eventActorDoCheckpoint(時間)
  }

おすすめ

転載: www.cnblogs.com/weiyiming007/p/11387814.html