2017-04-05 1 views
1

J'essaye d'exécuter UDF dans Hive, qui devrait fondamentalement balayer à travers le fichier csv externe en utilisant la valeur de la table comme un autre argument. Recherche J'utilise:Hive ne peut pas trouver de fichier à partir du cache distribué sur 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; 

Les résultats sont instables et dans certains cas, exactement la même requête fonctionne très bien, mais dans environ 80% des cas, il retourne exception:

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) 

...

fichier semble être ajouté au cache distribué:

hive> list files; 
/mnt/tmp/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_resources/myfile.csv 

Je l'ai essayé avec variou s versions de EMR ainsi que de divers types d'instances et n'a pas pu trouver un modèle ou ce qui déclenche ce problème. Tout conseil sera très apprécié.

+0

Je suis également confronté au même problème sur EMR. Avez-vous pu le réparer? J'ai essayé les deux façons - MyUDF ("./ MyFile.txt") et MyUDF ("MyFile.txt"). J'ai ajouté une connexion pour imprimer le chemin du fichier à partir de UDF, Il essaie de trouver le fichier dans le répertoire "/ user/home". – Ajeet

+0

Eh bien, en quelque sorte. Je courais mes travaux en copiant et collez le script Hive dans la fenêtre du terminal. Mon travail a été - exécuter même travail à partir d'une autre fenêtre de terminal et puis il fonctionne magiquement, encore peu clair pourquoi cela peut importer ... – Coppernick

Répondre

0

Vous pourriez activer DEBUG pour trouver plus d'informations. Mais en général, j'ai vu des problèmes similaires quand il y avait un redimensionnement (shrink) sur le cluster EMR provoquant la suppression de certains blocs du fichier de cache distribué HDFS attendu du cluster en raison d'une réplication insuffisante.

+0

Merci, va l'essayer. AWS support technique suggéré jusqu'à présent pour exécuter la déclaration immédiatement après l'ajout de fichiers, car ils supposent que la session où les fichiers externes ont été ajoutés pourrait être fermée. Les fichiers ne seront pas vus dans ce cas. Cela semble raisonnable, mais ça ne marche pas dans mon cas – Coppernick