私はHiveでUDFを実行しようとしています。これは基本的に別の引数としてtableの値を使用して外部csvファイルをスキャンする必要があります。私が使用 クエリ:HiveはEMRの分散キャッシュからファイルを見つけることができません
add jar s3://bucket_name/udf/hiveudf.jar;
add FILE hdfs:///myfile/myfile.csv;
CREATE TEMPORARY FUNCTION MyFunc AS '....udf.myUDF';
SELECT mydate, record_id, value, MyFunc('myfile.csv',value) from my_table;
結果は不安定であり、いくつかのケースでは正確に同じクエリがうまく動作しますが、症例の約80%で、それは例外を返します:
java.io.FileNotFoundException: myfile.csv (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at java.io.FileReader.<init>(FileReader.java:58)
...
ファイルが分散キャッシュに追加されているようです:
hive> list files;
/mnt/tmp/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_resources/myfile.csv
さまざまなインスタンスタイプと同様にEMRのリリースもあり、パターンを見つけることができなかったか、この問題を引き起こす要因が見つかりませんでした。どんなアドバイスも高く評価されます。
私もEMRで同じ問題に直面しています。あなたはそれを修正することができましたか?私は両方の方法 - MyUDF( "./ MyFile.txt")とMyUDF( "MyFile.txt")を試しました。 UDFから印刷ファイルのパスにいくつかのログを追加しました。 "/ user/home"ディレクトリにあるファイルを検索しようとしています。 – Ajeet
まあ、一種。私はHiveスクリプトをターミナルウィンドウにコピー&ペーストして仕事をしていました。私の仕事は、別のターミナルウィンドウから同じ仕事を実行し、それが魔法のように動作していて、それがなぜ問題なのかまだ分かりません。 – Coppernick