2010-11-21 23 views
2

Googleのネクサスでmapreduceを正常に実行したことがあると聞いたことがあります。アンドロイド上で完全にクラスタ化されたmapreduceを実行するパフォーマンスに関する情報はありません。携帯端末でmapreduceを実行中

私は実際にマップされていないデータをクラスタ化されていない比較的少量のデータで自分の携帯電話で実行したいのですが、それは本当にハープを使う価値がありますか?削除されたバージョンはどこにでもありますか?任意の選択肢?

答えて

6

map reduceのようなプロセスを使用することの全ポイントは、複数のコンピュータ間でワークロードを分割することです。同時に、現在のコンピュータでは同時実行が不可能になります。複数のAndroidデバイスを連携させる計画がない場合、hadoopのようなものを使う必要はほとんどありません。

デバイス上のすべてのデータを読み込むことができる場合(これはあなたができることです)。パラレルでアルゴリズムを実行するのに最も近いのは、複数のスレッドを使用してデータを分割することです。並列プログラミングのメリットを得るために、マップを減らすスタイルのプログラミングを行う必要はなく、単にプロデューサ/コンシューマモデルとしてアルゴリズムを開発する方が簡単かもしれません。しかし、もしあなたがただそれを持っていなければ、それをやる方法があります。

2つのBlockingQueues(インキューとアウトキュー)とファイル(プロデューサ)からデータを読み込むスレッドから始めます。インキューから読み取り、アウトキューに書き込むスレッドプールを作成します。各スレッドは、入力の1つ(すなわち、コンシューマ)の計算を行い、その結果をアウトキューにポストして、プロデューサが結果を受け取るようにする。インキューとアウトキューを1回通過すると、マップ削減プロセスの半分が実行されます。これは一般にプロデューサ/コンシューマと呼ばれます。あなたはそのスタイルのアーキテクチャだけで多くを行うことができます。

完全なmap-reduceを実行する場合は、プロセスを繰り返して、reduceステップを並行して実行します。プロデューサーは、キーを使用してすべての結果をマップステップから収集し、バックアウトをインキューにフィードします。各コンシューマはreduceステップを実行し、その結果をout-queueにポストします。ここでプロデューサは最終ソートを実行し、結果をUIに提示します。

したがって生産のための完全な状態遷移は次のようになります

  1. 入力ファイルを解析し、そしてインキュー上に落下するように作業負荷を作成します。
  2. すべてのマップ処理が完了するまでアウトキューから結果を読み取ります。
  3. 結果をキーで結合します。
  4. すべての結果を同じキーでインキューに1つの作業単位として書き込みます。受信したすべての一意のキーについて繰り返します。
  5. アウトキューに戻ってくるすべての結果を読み取ります。

消費者の状態遷移は次のようになります。

  1. イン・キューからの作業単位を読みます。
  2. その作業単位でマップ・ロジックを実行します。
  3. 結果+キーをアウトキューに書き込みます。
  4. in-queueから作業ユニットを読み取ります。
  5. その作業単位でreduce論理を実行します。
  6. アウトキューに結果を書き込みます。

アンドロイドのヴィオラマップを減らすスタイルフレームワーク。

関連する問題