1

私のデータベースには複数のテーブルがあり、各テーブルは異なるエンティティタイプです。これらの異なるエンティティタイプのすべてのフィールドの和集合であるhadoopで使用するAvroスキーマがあり、さらにエンティティタイプフィールドがあります。

私がやりたいのは、エンティティタイプを結合されたAvroタイプにマップする、エンティティタイプごとにDBWritableを使用してDBInputFormatを設定するという方針に沿ったものです。次に、各DBInputFormatをMultipleInputsのようなものに指定して、複合入力フォーマットを作成できるようにします。次に、複合入力フォーマットをマップリデュースジョブに指定して、すべてのテーブルのすべてのデータを同じマッパークラスで一度に処理できるようにすることができます。

データはこれらのデータベーステーブルに絶えず追加されるため、新しいデータのみを取得して適切に分割するように、エンティティタイプ/dbtableごとにDBInputFormatを構成できる必要があります。

基本的に、DBInputFormatまたはDataDrivenDBInputFormatの機能が必要ですが、パスやMultipleInputsで実行できるのと同様の複合を作成する機能も必要です。

4

1 に答える 1

1

N個の入力テーブルからビューを作成し、DBInputFormat#setInputでビューを設定します。Clouderaの記事によると。したがって、ジョブが完了するまでの間、テーブル内のデータを更新するべきではないと思います。

Hadoopは、同じクエリを複数回実行する必要がある場合があります。毎回同じ結果を返す必要があります。したがって、データベースなどへの同時更新は、MapReduceジョブによって実行されているクエリに影響を与えないはずです。これは、MapReduceジョブの実行中にテーブルへの書き込みを禁止するか、「insert_date <yesterday」などの句を介してMapReduceのクエリを制限するか、MapReduceプロセスを起動する前にデータベースの一時テーブルにデータをダンプすることで実現できます。

StormHStreamingS4Strembasesなどのリアルタイム処理をサポートするフレームワークを評価します。これらの一部はHadoopの上にあり、一部はそうではありません。一部はFOSSであり、一部は商用です。

于 2011-12-02T15:04:54.490 に答える