Использование распределенного кеша с Pig на эластичной карте Reduce

Я пытаюсь запустить свой скрипт Pig (который использует UDF) на Amazon Elastic Map Reduce. Мне нужно использовать некоторые статические файлы из моих UDF.

Я делаю что-то вроде этого в своем 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;
    }
}

Я сохранил файл в своем ведре s3 /path/to/myfile.txt

Однако при выполнении задания Pig я вижу исключение:

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

Итак, мой вопрос: как использовать файлы распределенного кеша при запуске скрипта pig на EMR Amazon?

РЕДАКТИРОВАТЬ: Я понял, что pig-0.6, в отличие от pig-0.9, не имеет функции getCacheFiles (). Amazon не поддерживает pig-0.6, поэтому мне нужно придумать другой способ заставить работать распределенный кеш в 0.6.


person Vivek Pandey    schedule 22.11.2011    source источник
comment
Возможно, вы это уже знаете, но для других Amazon теперь поддерживает Pig 0.6 и 0.9.1 aws.amazon.com/elasticmapreduce/faqs/#pig-7   -  person Jorge González Lorenzo    schedule 03.01.2013


Ответы (1)


Я думаю, что добавление этого дополнительного аргумента к вызову командной строки Pig должно работать (с s3 или s3n, в зависимости от того, где хранится ваш файл):

–cacheFile s3n://bucket_name/file_name#cache_file_name

Вы должны иметь возможность добавить это в поле «Дополнительные аргументы» при создании потока работ.

person cabad    schedule 07.06.2013