1

MapReduce wiki ページを読みましたが、完全には理解できていません。クエリが map ステップと reduce ステップに分かれていることを理解しています。したがって、これを利用するには、GROUP BYs more を使用して、作業を map ステップから reduce ステップに移動する必要があります。これがどのように機能するかはよくわかりません。とても魔法のようです。MapReduce を利用する SQL クエリを作成するための一連のガイドラインを知りたいです。

どの句が map ステップまたは reduce ステップにあるかを知るにはどうすればよいですか? その背後にある理論は何ですか?より良いクエリを作成できるように、理論とその内部の仕組みを理解したいと思っています。

4

2 に答える 2

0

Hive は、実行する map/reduce の数 (および map と reduce の間の作業) を、クエリに基づいて可能な限り最適化しようとします。map/reduce の動作を制御したい場合は、Java で独自の map/reduce を記述できます。Hive の要点は、使い慣れた構文 (SQL) を使用して取得したい結果を表現できることです。その結果を得るために効率的な map/reduce シーケンスを作成する

パフォーマンス上の理由から、map フェーズでできるだけ多くの作業を行いたいと思うでしょう。通常、reducer よりも mapper の方が多く、データを移動する必要がないからです。Hiveサイトからコンバイナーを使用して、マップ側で集約関数を部分的に実行できる場合があることに注意してください(ただし、Hiveはこれを別の方法で処理すると思います)。

Group By のマップ側集計

hive.map.aggr は、集計方法を制御します。デフォルトは false です。true に設定されている場合、Hive は map タスクで直接第 1 レベルの集計を行います。通常、これにより効率が向上しますが、正常に実行するにはより多くのメモリが必要になる場合があります。

hive.map.aggr=true を設定します。SELECT COUNT(*) FROM table2

于 2013-04-10T11:22:02.820 に答える
0

Map関数はdata preparation stage、Mapperがprepare and filterデータを入力できるように、入力と同じものを渡すことができる場所reducer functionです。Reducer は Mapper から入力を取得し、クエリで指定されている場合はデータを削減しようとします。たとえば、リデューサーはcount,max,min of a column、マッパーによって提供されたデータからのように集計を計算します。たとえば、私はあなたに要件がありますfinding word count for the words not in set a,an and the

not filtering is done by mapper.

counting is done by by reducer.

私の理解によると、Hiveクエリの3つのことは、リデューサー機能につながります。

1.group by

2.join

3.multi row function 

残りのほとんどは Mapper 関数につながります。

于 2013-04-10T05:43:35.603 に答える