2011-11-22 39 views
5

Sto tentando di eseguire il mio script Pig (che utilizza le UDF) su Amazon's Elastic Map Reduce. Ho bisogno di usare alcuni file statici all'interno delle mie UDF.Utilizzo della cache distribuita con Pig su mappa elastica Ridurre

faccio qualcosa come questo nel mio UDF:

public class MyUDF extends EvalFunc<DataBag> { 
    public DataBag exec(Tuple input) { 
     ... 
     FileReader fr = new FileReader("./myfile.txt"); 
     ... 
    } 
    public List<String> getCacheFiles() { 
     List<String> list = new ArrayList<String>(1); 
     list.add("s3://path/to/myfile.txt#myfile.txt"); 
     return list; 
    } 
} 

ho memorizzato il file nel mio secchio S3 /path/to/myfile.txt

Tuttavia, a correre il mio lavoro Maiale, mi vedi un'eccezione:

Got an exception java.io.FileNotFoundException: ./myfile.txt (No such file or directory)

Quindi, la mia domanda è: i file della cache come si usa distribuito durante l'esecuzione di script di maiale EMR di Amazon?

EDIT: Ho capito che pig-0.6, a differenza di maiale-0.9 non ha una funzione chiamata getCacheFiles(). Amazon non supporta pig-0.6 e quindi ho bisogno di capire un altro modo per ottenere il lavoro della cache distribuita in 0.6

+0

Forse lo sai già, ma per altri Amazon ora supporta Pig 0.6 e 0.9.1 http://aws.amazon.com/elasticmapreduce/faqs/#pig-7 –

risposta

0

Penso che aggiungere questo arg supplementare alla chiamata della riga di comando Pig dovrebbe funzionare (con s3 o s3n, a seconda di in cui il file viene memorizzato):

–cacheFile s3n://bucket_name/file_name#cache_file_name 

si dovrebbe essere in grado di aggiungere che nella casella "Args extra" quando si crea il flusso di lavoro.

+0

@ vivek-pandey La mia risposta ha risolto la tua risposta problema? – cabad

Problemi correlati