2011-11-22 10 views
5

Estoy intentando ejecutar mi script Pig (que usa UDF) en Amazon's Elastic Map Reduce. Necesito usar algunos archivos estáticos desde mis UDF.Uso de la caché distribuida con Pig en Elastic Map Reduce

hago algo como esto en mi 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; 
    } 
} 

he guardado el archivo en mi cubo s3 /path/to/myfile.txt

Sin embargo, en el funcionamiento de mi trabajo cerdo, me ver una excepción:

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

por lo tanto, mi pregunta es: archivos de caché ¿Cómo uso distribuye cuando se ejecuta la escritura de cerdo en EMR de Amazon?

EDIT: descubrí que pig-0.6, a diferencia de pig-0.9 no tiene una función llamada getCacheFiles(). Amazon no es compatible con pig-0.6, así que tengo que encontrar una forma diferente de obtener trabajo de caché distribuida en 0.6

+0

Quizás ya lo sepa, pero para otros, Amazon ahora es compatible con Pig 0.6 y 0.9.1 http://aws.amazon.com/elasticmapreduce/faqs/#pig-7 –

Respuesta

0

Creo que agregar este arg extra a la llamada de línea de comando Pig debería funcionar (con s3 o s3n, dependiendo de donde se almacena el archivo):

–cacheFile s3n://bucket_name/file_name#cache_file_name 

Usted debe ser capaz de añadir que en el cuadro de "argumentos adicional" al crear el flujo de trabajo.

+0

@ vivek-pandey ¿Mi respuesta solucionó su problema? ¿problema? – cabad

Cuestiones relacionadas