12

私は、大量の生データの山の上にあるプロジェクトに取り組んでおり、そこからの集計は、一般向けの情報サイトを強化するために使用されます (いくつかの単純な集計には、さまざまな合計や上位 10 件の合計などの単純な集計と、それ以上のデータがあります)。複雑な集計)。現在、数か月に 1 回更新します。これには、新しいデータの追加、既存のレコードの更新または削除、およびすべての集計のオフラインでの再実行が含まれます。その後、新しい集計が運用環境にデプロイされます。

すべてをゼロから再集計することは現実的ではないため、更新の頻度を上げることに関心があるため、既存の集計を更新して新しいレコード、変更されたレコード、または削除されたレコードを反映するローリング集計を行いたいと考えています。

CouchDB の MapReduce 実装は、私が探している機能を大まかに提供します。マップの出力がリーフにある大きな B ツリーに MapReduce タスクの中間状態を格納し、reduce 操作がブランチを徐々に結合します。新しいレコード、更新されたレコード、または削除されたレコードにより、サブツリーはダーティとしてマークされ、再計算されますが、リデュース ツリーの関連部分のみを変更する必要があり、ダーティでないサブツリーからの中間結果はそのまま再利用できます。

ただし、さまざまな理由 (CouchDB の将来に関する不確実性、MR 以外の 1 回限りのクエリに対する便利なサポートの欠如、現在の SQL を多用する実装など) から、このプロジェクトでは CouchDB を使用しないことを希望します。この種のツリーのようなインクリメンタルなマップ削減戦略の他の実装を探しています (Hadoop または同様のものの上にある可能性がありますが、必ずしもそうとは限りません)。

いくつかの可能な応答をプリエンプトするには:

  • MongoDB がインクリメンタル MapReduce をサポートしていると思われることは承知しています。私の意見では、それは実際にはデータセットへの追加にのみうまく機能し、更新や削除には機能しないため、本物ではありません。
  • Incoopの論文も知っています。これは私が望んでいることを正確に説明していますが、実装を公開しているとは思いません。
4

1 に答える 1

1

私にとって最初に頭に浮かぶのは、まだHiveです。マテリアライズドビューなどの機能があり、集計を保持し、基になるデータチェンジャーの場合は選択的に無効にすることができます.

それほど新しいものではありませんが、Uber は実際に、インクリメンタル アップデートの課題にどのようにアプローチしたかについてかなり時代を超越した記事を公開しました。この記事の主なポイント:

  1. 実際のレイテンシのニーズを具体的に把握することで、莫大な費用を節約できます。
  2. Hadoop は、プリミティブを使用してインクリメンタル処理をサポートすることで、さらに多くの問題を解決できます。
  3. 統合アーキテクチャ (コード + インフラストラクチャ) は、未来への道です。

完全な開示: 私は Cloudera の従業員です。記事で参照されているさまざまなツールを含む Hadoop や、私が直接参照した Hive を含むビッグ データ プラットフォームのプロバイダー。

于 2020-08-01T21:40:05.957 に答える