2017-04-05 11 views
1

私は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のリリースもあり、パターンを見つけることができなかったか、この問題を引き起こす要因が見つかりませんでした。どんなアドバイスも高く評価されます。

+0

私もEMRで同じ問題に直面しています。あなたはそれを修正することができましたか?私は両方の方法 - MyUDF( "./ MyFile.txt")とMyUDF( "MyFile.txt")を試しました。 UDFから印刷ファイルのパスにいくつかのログを追加しました。 "/ user/home"ディレクトリにあるファイルを検索しようとしています。 – Ajeet

+0

まあ、一種。私はHiveスクリプトをターミナルウィンドウにコピー&ペーストして仕事をしていました。私の仕事は、別のターミナルウィンドウから同じ仕事を実行し、それが魔法のように動作していて、それがなぜ問題なのかまだ分かりません。 – Coppernick

答えて

0

DEBUGを有効にして詳細を確認することができます。しかし、一般的には、レプリケーションが不十分なため、クラスタから予想されるHDFS分散キャッシュファイルがクラスタから削除される原因となる、EMRクラスタのサイズ変更(縮小)が発生した場合、同様の問題が発生しました。

+0

ありがとう、それを試してみましょう。 AWSのテクニカルサポートは、外部ファイルが追加されたセッションが終了する可能性があると想定しているため、これまでファイルを追加した直後に文を実行するように提案していました。この場合、ファイルは表示されません。それは合理的だと思うけど、私の場合はうまくいかない – Coppernick

関連する問題