12

SpringBatch で MapReduce スタイルの操作を行うことは可能ですか?

バッチ ジョブには 2 つのステップがあります。最初のステップでは、平均を計算します。2 番目のステップでは、各値を平均と比較して別の値を決定します。

たとえば、学生のスコアの巨大なデータベースがあるとしましょう。最初のステップでは、各コース/試験の平均スコアを計算します。2 番目のステップでは、個々のスコアを平均と比較して、単純なルールに基づいて成績を決定します。

  1. A 生徒の成績が平均以上の場合
  2. B 学生のスコアが平均の場合
  3. C 生徒の点数が平均以下の場合

現在、私の最初のステップは、平均を選択してテーブルに書き込む Sql です。2 番目のステップは、平均スコアを個々のスコアと結合し、Processor を使用してルールを実装する Sql です。

ステップでよく使用される avg や min などの同様の集計関数があります。Sql をできるだけシンプルに保ちながら、プロセッサでこれを実行できるとよいと思います。グループ化基準に基づいて複数の行にわたって結果を集計し、出力テーブルに平均/最小値を 1 回書き込むプロセッサを作成する方法はありますか?

このパターンは何度も繰り返され、平均スコアと個々のスコアの両方を取得する Sql を使用したシングル プロセッサの実装を探しているわけではありません。

4

2 に答える 2

2

可能です。あなたも1つ以上のステップを必要としません。Map-Reduceは単一のステップで実装できます。ItemReaderとItemWriterが関連付けられたステップを作成できます。Map-Reduceの時点でのItemReader-ItemWriterペアについて考えてみてください。適切なラインアグリゲーションを備えたカスタムリーダーとライターを使用することで、必要な効果を実現できます。リーダー/ライターがStreamインターフェースを実装して、Springバッチによる中間のStepContext保存操作を保証することをお勧めします。

楽しみのために試してみましたが、作業能力が単一のJVMによって制限されているため、つまり、Hadoopクラスター(または他の実際のマップが実装を減らす)の実稼働環境のパフォーマンスに到達できなかったため、意味がないと思います。また、データサイズが大きくなるにつれて、呼び出し可能になるのは非常に困難になります。

素晴らしい観察ですが、IMOは現在実際のタスクには役に立ちません。

于 2012-04-27T11:37:30.690 に答える
0

バッチ処理フレームワークは、プログラミング/構成とランタイムの問題を分離する必要があると思います.Springバッチが、JVM、Hadoop Cluster(JVMも使用)などのすべての主要なバッチ処理ランタイムに対して一般的なソリューションを提供するといいでしょう.

-> map-reduce や従来の Java などの他のプログラミング モデルを統合する Spring バッチ プログラミング/構成モデルを使用してバッチ プログラムを記述します。

-> 必要に応じてランタイムを選択します (単一の JVM、Hadoop クラスター、または NoSQL)。

Spring Data の試みはその一部を解決し、さまざまなタイプのデータ ソースに統一された構成モデルと API の使用法を提供します。)

于 2013-05-16T02:54:00.850 に答える