10

ハイブでのクエリに基づいてカスタムマップ削減プログラムを作成したいので、数日間行き詰まりました。グーグルで検索した後、多くの例が見つかりませんでした。ルールについてまだ混乱しています。

カスタム mapreduce プログラムを作成するための規則は何ですか? mapper と reducer クラスはどうですか?

誰でも解決策を提供できますか?

このプログラムを Java で開発したいのですが、まだ行き詰まっています。コレクターで出力をフォーマットするときに、マッパーとリデューサー クラスで結果をフォーマットするにはどうすればよいですか?

この種のものについて、誰かが私にいくつかの例と説明を与えたいですか?

4

1 に答える 1

23

カスタム マッパー/リデューサーをハイブ クエリに追加するには、基本的に 2 つの方法があります。

  1. 使用してtransform

SELECT TRANSFORM(stuff1, stuff2) FROM table1 USING 'script' AS thing1, thing2

ここで、stuff1、stuff2 は table1 のフィールドで、script は後で説明する形式を受け入れる任意の実行可能ファイルです。thing1、thing2 はスクリプトからの出力です

  1. map と reduce の使用
FROM (
    FROM table
    MAP table.f1 table.f2
    USING 'map_script'
    AS mp1, mp2
    CLUSTER BY mp1) map_output
  INSERT OVERWRITE TABLE someothertable
    REDUCE map_output.mp1, map_output.mp2
    USING 'reduce_script'
    AS reducef1, reducef2;

これは少し複雑ですが、より詳細に制御できます。これには 2 つの部分があります。最初の部分では、マッパー スクリプトがデータを受け取りtable、フィールド mp1 と mp2 にマップします。これらは に渡されreduce_script、このスクリプトは で指定したキーでソートされた出力を受け取りますCLUSTER BY mp1注意してください、複数のキーが 1 つの reducer によって処理されます。reduce スクリプトの出力は table に移動しますsomeothertable

現在、これらのスクリプトはすべて単純なパターンに従っています。stdin から 1 行ずつ読み取ります。フィールドは\t分離され、同じ方法で stdout に書き戻されます (フィールドは '\t' で区切られます)。

このブログをチェックしてください。いくつかの素晴らしい例があります。

http://dev.bizo.com/2009/07/custom-map-scripts-and-hive.html

http://dev.bizo.com/2009/10/reduce-scripts-in-hive.html

于 2011-07-27T07:24:25.037 に答える