2016-05-13 5 views
0

ハイブターミナルでうまく動作するハイブUdfがあります。シェルスクリプトで実行したいものです。ハイブ端末に 私は、次のコマンドを実行することができる午前:シェルスクリプトによるハイブudfの実行

use mashery_db; 
add jar hdfs://nameservice1/tmp/nextdata_aggregations/custom_jar/readerCheck.jar; 
add file hdfs://nameservice1/tmp/GeoLite2-City.mmdb; 
CREATE TEMPORARY FUNCTION geoip AS 'com.mashery.nextdata.hive.udf.GeoIPGenericUDF'; 

しかし、私はシェルスクリプトで上記のコードを追加してい

hive -e "use mashery_db;" 
hive -e "add jar hdfs://nameservice1/tmp/nextdata_aggregations/custom_jar/readerCheck.jar;" 
hive -e "add file hdfs://nameservice1/tmp/GeoLite2-City.mmdb;" 
hive -e "CREATE TEMPORARY FUNCTION geoip AS 'com.mashery.nextdata.hive.udf.GeoIPGenericUDF';" 

第一「ハイブ-e」はうまく機能してjarファイルを追加しますしかし、最後の1つは、一時的な機能を作成しない動作します。私は、エラーの下に取得しています:

FAILED: ParseException line 1:35 mismatched input 'com' expecting StringLiteral near 'AS' in create function statement 

私も単一引用符で

hive -e "CREATE TEMPORARY FUNCTION geoip AS 'com.mashery.nextdata.hive.udf.GeoIPGenericUDF';" 

を試してみました、私はFAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask

FAILED: Class com.mashery.nextdata.hive.udf.GeoIPGenericUDF not found 

を取得しています、それはいただきました!ない場合ハイブUDFは、シェルスクリプトをサポートしています間違っている。

+3

jarをインポートして、ハイブへの1回の呼び出しですべての関数を作成してみてください。つまり、 'hive -e 'はjar path_to_jar/foo.jarを追加し、' com.package.UDF'として一時関数fooを作成します; " – gobrewers14

+0

@ GoBrewers14は私のために働いてくれて感謝します:-) –

答えて

1

hive -eを呼び出すたびに、以前のものとは異なる新しいハイブシェルが作成されるため、UDFがどこにあるのかを忘れてしまいます。 1つの解決策は、あなたのハイブコマンドをファイル(例えば "commands.hql")に入れて、hive -f commands.hqlの代わりに-eを使用する方がよいでしょう。

ファイルは次のようになります。

use mashery_db; 
add jar hdfs://nameservice1/tmp/nextdata_aggregations/custom_jar/readerCheck.jar; 
add file hdfs://nameservice1/tmp/GeoLite2-City.mmdb; 
CREATE TEMPORARY FUNCTION geoip AS 'com.mashery.nextdata.hive.udf.GeoIPGenericUDF';" 
0

あなたは、これがhive -ehive -fの両方で動作するように取得することができます。

hive -e "use mashery_db; 
add jar hdfs://nameservice1/tmp/nextdata_aggregations/custom_jar/readerCheck.jar; 
add file hdfs://nameservice1/tmp/GeoLite2-City.mmdb; 
CREATE TEMPORARY FUNCTION geoip AS 'com.mashery.nextdata.hive.udf.GeoIPGenericUDF';" 

ファイルとしてそれらを作成し、hive -f hive_file.hqlが同様に動作します使用します。

関連する問題