2011-10-20 8 views
3

私はStaticLookupUDFというUDFクラスを構築していますが、構築中にローカルファイルから静的データをロードする必要があります。ハイブは、各レコードに対して新しいUDFオブジェクトをインスタンス化しますか?

この場合、evaluate()メソッドの呼び出しごとに静的データを再ロードしたくないという点で、私は必要以上に作業を複製しないようにしたいと思います。

明らかに、各マッパーは独自のUDFのインスタンス化を使用しますが、処理されるレコードごとに新しいインスタンスが生成されるのは明らかです。

たとえば、の場合、マッパーは3行を処理します。単一のStaticLookupUDFを作成してevaluate()を3回呼び出すか、各レコードに対して新しいStaticLookupUDFを作成し、インスタンスごとに1回だけ評価を呼び出しますか?

2番目の例が真であれば、どのような方法でこれを構成すればよいですか?

ドキュメントのどこにもこれが見つかりませんでしたが、コードを見ていきますが、同時にスマートな人々に尋ねると思いました。

+0

スタティックデータが何回読み込まれているのか分かりませんが、望ましくない方法で読み込まれた場合、stdinから読み込んでstdoutに書き込むスクリプト/ jarでデータをストリーミングできます。この場合、静的データはワーカープロセスごとに1回ロードされます。 –

+0

私はそれをどうやって行うのか少し詳しく説明できますか? –

+0

私はこの答えに言及しました(http://stackoverflow.com/questions/6178614/custom-map-reduce-program-on-hive-whats-the-rulehow-about-input-and-output/6840802#6840802)このwikiをチェックすることができます。https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Transform –

答えて

1

これについては完全にはわかりませんが、必要に応じてデータをロードする静的な遅延値を使用して回避しました。

この方法では、マッパーごとに静的な値の1つのインスタンスがあります。したがって、データセットを読み込み、6つのマップタスクがある場合、データを6回読み込みます。理想的ではありませんが、1レコードにつき1回以上です。

関連する問題