問題タブ [mapreduce]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
6353 参照

sorting - レデューサーに送信される前に値を並べ替える

システムのこつをつかむために、hadoop で小さなテスト アプリケーションを構築することを考えています。

私が念頭に置いているアプリケーションは、統計を行う領域になります。レデューサー関数から「各キーの10個の最悪の値」が必要です(一部のキーの値が膨大になる可能性を想定する必要があります)。

私が計画したのは、レデューサーに入る値は基本的に「実際の値」と「実際の値の品質/関連性」の組み合わせになるということです。関連性に基づいて、私は「単純に」10個の最悪/最良の値を取り、それらをレデューサーから出力したいと考えています。

どうすればそれを行うことができますか (特定のキーに膨大な数の値があると仮定して)? レデューサーに送信される前にすべての値を並べ替える方法はありますか (最初の 10 個を読み取ったときに入力の読み取りを停止するだけです)、またはこれを別の方法で行う必要がありますか?

ここで誰かが私が見ることができるサンプルコードを教えてもらえますか?


更新: 2 つの興味深いJira 課題 HADOOP-485およびHADOOP-686を見つけました。

Hadoop 0.20 API でこれを使用する方法に関するコード フラグメントを持っている人はいますか?

0 投票する
5 に答える
11629 参照

parallel-processing - MPI が MapReduce よりも適しているシナリオは何ですか?

私の知る限り、MPI を使用すると、クラスター内のさまざまなノードがどのように通信するかをより詳細に制御できます。

MapReduce/Hadoop では、各ノードが何らかの計算を行い、他のノードとデータを交換してから、結果のパーティションを照合します。シンプルに見えますが、プロセスを反復できるため、K-means や PageRank などのアルゴリズムでさえモデルに非常によく適合します。スケジューリングの局所性を備えた分散ファイル システムでは、パフォーマンスは明らかに良好です。対照的に、MPI では、ノードが相互にメッセージを送信する方法を明示的に制御できます。

より一般的な MPI モデルが単純な MapReduce モデルよりも明らかに有利であるクラスター プログラミング シナリオを説明できる人はいますか?

0 投票する
3 に答える
4244 参照

python - Hadoop ストリーミングで個別の出力ファイルを生成する

マッパー (Python スクリプト) のみを使用し、リデューサーを使用しない場合、出力の長いファイルではなく、出力の各行に対して、ファイル名としてキーを使用して別のファイルを出力するにはどうすればよいですか?

0 投票する
1 に答える
3347 参照

hadoop - HBase からの Hadoop mapreduce ストリーミング

HBase (0.20.1) をデータ ソースとデータ シンクの両方として使用する Hadoop (0.20.1) mapreduce ジョブを作成しています。Python スクリプトとの間でデータをストリーミングするために hadoop-0.20.1-streaming.jar を使用する必要がある Python でジョブを作成したいと考えています。データ ソース/シンクが HDFS ファイルの場合、これは正常に機能します。

Hadoop は mapreduce の HBase との間のストリーミングをサポートしていますか?

0 投票する
1 に答える
1942 参照

python - HTML タグを含むファイルに対する Hadoop MapReduce ジョブ

大量の大きな HTML ファイルがあり、それらに対して Hadoop MapReduce ジョブを実行して、最も頻繁に使用される単語を見つけたいと考えています。マッパーとリデューサーの両方を Python で作成し、Hadoop ストリーミングを使用してそれらを実行しました。

これが私のマッパーです:

これが私のレデューサーです:

「hello world hello hello world ...」のような小さなサンプルの小さな文字列をパイプするだけで、ランク付けされたリストの適切な出力が得られます。ただし、小さな HTML ファイルを使用しようとして、cat を使用して HTML をマッパーにパイプしようとすると、次のエラーが発生します (input2 には HTML コードが含まれています)。

なぜ私がこれを取得しているのか、誰か説明できますか? また、MapReduce ジョブ プログラムをデバッグする良い方法は何ですか?

0 投票する
2 に答える
2946 参照

hadoop - map() と reduce() は同じ型のキーと値のペアを返す必要がありますか?

MapReduce ジョブ (関連する場合は具体的には Hadoop) を作成するときは、キーと値のペアのシーケンスを生成するmap()と関数を定義する必要があります。reduce()キーと値のデータ型は、アプリケーションで自由に定義できます。

(string, int)単語カウントの標準的な例では、両方の関数が、キーが単語であり、値が出現回数である型のペアを生成します。ここでは、私が見た他のすべての例と同様に、出力されたキーと値の型は 2 つの関数間で一貫しています。

MapReduce のアプリケーション内で生成されたキーmap()と値のペアの型は同じである必要がありますか? reduce()はいの場合:なぜですか?

0 投票する
0 に答える
167 参照

logging - アクセスログ解析の表示

Catalyst Web アプリケーションからのアクセス ログを分析する作業を行っています。データは、Web ファームの前にあるロード バランサーからのもので、1 日あたり合計約 35Gb です。これはHadoop HDFS ファイルシステムに保存されており、 MapReduce を ( Dumbo経由で、これはすばらしい) 使用して数値を処理します。

分析の目的は、キャパシティ プランニング、最適化、およびシステムを監視するためのしきい値。Analog のような従来のツールは、最も要求の多い URL や最も使用されているブラウザーを教えてくれますが、どれも役に立ちません。/controller/foo?id=1984それが最も人気のある URL であることを知る必要はありません。へのすべてのヒットのヒット率と応答時間を知る必要が/controller/fooあるため、最適化またはキャッシュの余地があるかどうかを確認し、このアクションのヒットが突然 2 倍になった場合に何が起こるかを見積もることができます。

MapReduce を使用して、データを期間ごとのアクションごとのリクエストに簡単に分割できます。問題は、それをわかりやすい形式で表示し、重要な傾向や異常を見つけ出すことです。私の出力は次の形式です。

つまり、キーは期間であり、値は(action, hits, cache hits)期間ごとのタプルです。(これに固執する必要はありません。これは、これまでのところ私が持っているものです。)

約250のアクションがあります。それらを組み合わせて少数のグループにすることはできますが、各アクションのリクエスト数 (または応答時間など) を同じグラフにプロットすることはおそらくうまくいきません。第一に、ノイズが多すぎます。第二に、絶対数はあまり重要ではありません。頻繁に使用される軽量でキャッシュ可能な応答に対するリクエストが 100 リクエスト/分増加することは、100 リクエスト/分増加することよりもはるかに重要ではありません。めったに使用されないが高価な(おそらくDBにヒットする)キャッシュ不可能な応答で。同じグラフでは、ほとんど使用されていないアクションに対する要求の変化は見られません。

静的なレポートはあまり良くありません。膨大な数の表は、消化するのが困難です。時間単位で集計すると、重要な分単位の変化を見逃す可能性があります。

助言がありますか?この問題をどのように処理していますか? 1 つの方法は、リクエストの割合またはアクションごとの応答時間の大幅な変化を強調することだと思います。ローリング平均と標準偏差がこれを示しているかもしれませんが、もっと良いことはできますか?

他にどのような指標や数値を生成できますか?

0 投票する
2 に答える
85 参照

parallel-processing - 並列化されたレコードの結合 - 複数のキーでのマッチング

MapReduce を使用して、並列化されたレコード結合システムを構築することを検討しています。言語は問題ではありません。Hadoop などの既存のライブラリを使用することも、必要に応じて独自のライブラリを構築することもできます。それについては心配していません。

しかし、私が常に直面している問題は、レコードを複数の条件で一致させる必要があるということです。例: 個人の名前または電話番号に基づいてレコードを照合する必要がある場合がありますが、必ずしも個人の名前電話番号ではありません。

たとえば、各レコードに次のキーがあるとします。

  1. 「ジョン・スミス」および「555-555-5555」
  2. 「ジェーン・スミス」および「555-555-5555」
  3. 「ジョン・スミス」および「555-555-1111」

システムに 3 つのレコードすべてを取得し、それらがキーの 1 つで一致することを確認し、それらを結合して、両方の名前 ('John Smith' と 'Jane Smith') と両方の電話番号を持つ単一の結合レコードにします。 (「555-555-5555」および「555-555-1111」)。

これは MapReduce を使用して達成できるものですか? もしそうなら、一致したすべてのレコードをReduce関数に渡すことができるように、Map関数によって生成されたキーをどのように一致させますか.*または、これを行うことができる別の/より良い方法はありますか? 私の唯一の本当の要件は、並列化する必要があることです。

[*] 注意: 私は、Reduce 関数がジョブ全体に対して 1 つの結果を生成するのではなく、Reduce 関数の各呼び出しが 1 つの結合されたレコードを生成するような方法で Reduce 関数を使用できると想定しています。