Использование распределенного кэша с Pig на Elastic Map Reduce - PullRequest
5 голосов
/ 22 ноября 2011

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

Я делаю что-то подобное в моем 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

1 Ответ

0 голосов
/ 07 июня 2013

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

–cacheFile s3n://bucket_name/file_name#cache_file_name

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

...