2

オンラインでは、正規の単語数マップがウォークスルーを削減する例が非常に多く見られます。k,v のマッパー入力 => k,list(v) の入力を減らすことを理解しています。いくつかの魔法は map reduce によって進行します。mapreduce をより実用的な例に適用する方法がよくわかりません。たとえば、米国のすべての従業員の給与と、州や都市などのその他の詳細を含むファイルがあるとします。mapreduce はどのように機能し、次の列が集計された出力レポートを提供しますか? 州、都市、平均(給与)

SQL では、次のようなクエリでこれを取得できます。

Select state, city, avg(salaries) 
From employee_tbl
Group by state, city

上記の結果セットを得るためにどのように作業を削減しますか。ハイブを使用しましたが、その SQL がどのように変換されてマップおよび削減されるのかわかりません。

4

2 に答える 2

4

map-reduce ジョブで SQL クエリを変換する簡単な方法は、Hadoop で HIVE を使用することです。

ただし、それを望まない場合のために、SQL クエリを map-reduce ジョブにエミュレートする際に、ほとんどの例で適用できる簡単な経験則は次のとおりです。

Map 関数の Key-Out は、group by 句の列です。

あなたの例では、state-city をキーにして、Map 関数で出力します (それらの間に区切り文字を使用します)。

Map 関数の Value-out は、集計関数を実行する列です。

あなたの例では、個々の給与になります(集計する列が複数ある場合は、同じ区切り記号で区切ることができます)。

Reduceでのキーインは、Map関数のキーアウトと同じになります

.

reduce 関数の value-out は、同じキーを持つすべての行の value-out に対して集計関数を実行した後の値になります。

したがって、この場合、入力値 (給与) をすべて合計するだけで、出力値は一意の「州と都市」のペアの給与の合計になります。

于 2013-01-31T07:00:18.550 に答える
1

SQL クエリを一連の Map/Reduce ジョブに直接変換したい場合は、必ずYSmartを検討する必要があります。これは、Hadoop の上に構築された単なる SQL to Map/Reduce です。また、一部の研究では、Hive よりも高速である可能性が示されていますが、自分でテストしていないため、この主張を支持することはできません.

ドキュメントから引用したように、YSmart は以下を提供します。

  • 高性能: YSmart によって生成された MapReduce プログラムは最適化されています。YSmart は、クエリを翻訳するときに、クエリ内の相関関係を自動的に検出して利用できます。この相関認識機能により、冗長な計算、不要なディスク IO 操作、およびネットワーク オーバーヘッドが大幅に削減されます。YSmart のパフォーマンス上の利点については、パフォーマンス ページを参照してください。

  • 高い拡張性: YSmart は変更や拡張が容易です。拡張性を目標に設計されています。YSmart の大部分は Python で実装されているため、コードが理解しやすくなっています。モジュール性とスクリプトの性質により、ユーザーは現在の機能を簡単に変更したり、YSmart に新しい機能を追加したりできます。

  • 高い柔軟性: YSmart は、翻訳モードと実行モードの 2 つの異なるモードで実行できます。翻訳モードでは、YSmart はクエリを Java コードに変換するだけですが、実行モードでは、YSmart は生成されたコードをコンパイルして実行します。この柔軟性により、ユーザーは生成されたコードを簡単に読み取り、変更、およびカスタマイズできます。

于 2013-01-31T19:15:03.793 に答える