0

jar ファイルである Hive 用のカスタム マッパーを作成したいと考えています。これをクエリでどのように使用しますか?

通常の構文を使用する:

add file myfile.jar

...

map using myfile.jar

動作しないようです。私が得るエラーは次のとおりです。

2013-04-15 22:52:26,207 INFO org.apache.hadoop.hive.ql.exec.ScriptOperator: スクリプトはすべての入力データを消費しませんでした。これはエラーと見なされます。2013-04-15 22:52:26,207 INFO org.apache.hadoop.hive.ql.exec.ScriptOperator: hive.exec.script.allow.partial.consumption=true を設定します。それを無視します。2013-04-15 22:52:26,207 FATAL ExecReducer: org.apache.hadoop.hive.ql.metadata.HiveException: java.io.IOException: 壊れたパイプ

注: 私の jar は、warblerを使用して jar にコンパイルされた jruby ファイルです。

4

3 に答える 3

0

Hive は、「ストリーム可能な」カスタム マッパーとリデューサー (標準入力から読み取り、標準出力に書き込む単純なプログラム) を使用します。そのため、通常は Python、Perl、PHP、さらには Bash などのスクリプト言語が使用されます。もちろんルビーも。

ただし、そのために Java プログラムを使用する場合は、そのプログラムを実行可能にする必要があります。単純な標準入力/標準出力の作業に Java を本当に使用する必要がありますか?

UPD: 代わりに、JRuby は単純な Ruby を使用します。

于 2013-04-16T02:40:04.310 に答える
0

正確に Java を使用する必要がある場合は、マッパーの代わりに独自の UDF を作成してみてください。実際、HiveQL 関数と UDF はマッパーと同じ働きをします。

于 2013-04-18T00:34:02.920 に答える
0

Hive は、任意のマッパー スクリプトを実行するだけです。この場合、jarファイルを次のように実行する必要がありますがjava -jar myfile.jar、として実行しようとしていました./myfile.jar. 私の解決策は、 というラッパー シェル スクリプトを追加することでしたmyfile.sh。シェル スクリプトが jar を実行し、私myfile.shはマッパーとして使用しました。このようにして、.jarファイルをマッパーとして使用できました。

于 2013-04-17T20:18:31.760 に答える