0

Hadoop を使用して、アプリケーションの一連の分析レコードを処理しています。ストリームに表示されるイベントに基づいてユーザーを分類し、後の段階でストリームを再度反復するときにその情報を使用したいと考えています。たとえば、アプリをアクティブ化していないすべてのユーザーに関するデータを生成したいとします。

第 1 ラウンドの削減の一環として、ストリームを 1 回反復することで、アクティブ化されない人を特定できます。

問題は、「ユーザー X がアクティベートしなかった」というデータをどこに置いて、次に第 2 ラウンドのマッパーでストリームを反復処理するときにその事実を調べられるようにするかということです。いくつかのアイデアがありますが、どれが正しい Hadoop の方法かわかりません。

  • ユーザーのリストを含む第 1 ラウンドのレデューサーからサイド ファイルを出力し、第 2 ラウンドでそれを読み込みます -- ファイル全体をメモリに読み込まないようにするにはどうすればよいですか、複数のフロントエンド レデューサーから複数のサイド ファイルを処理するにはどうすればよいですか(サイドファイルをソート/結合する良い方法はありますか)?
  • ユーザーのすべてのイベントをリデューサーのメモリにバッファリングして、ディスクに出力する前に「アクティブ化されていない」というタグを付けることができるようにします-少し気分が悪くなります。

それらの1つは「正しい方法」ですか、私が見逃している別の方法はありますか?

AWS Elastic MapReduce を使用しています。

4

1 に答える 1

0

これは、mapreduce を使用すると非常に簡単です。

Mapper: すべてのイベントをキーとして、ユーザーを値として発行します。

例えば:

USER_NEVER_ACTIVATED_APP : x
USER_PAID_FOR_APP : x
USER_NEVER_ACTIVATED_APP : y

Reducer: 基本的に、イベントごとにすべてのユーザーを取得します。この場合、次のようになります。

USER_NEVER_ACTIVATED_APP : x,y
USER_PAID_FOR_APP : x

この方法では、別のマッパーやジョブも必要ありません。

于 2011-09-17T18:12:09.400 に答える