在弹性映射中使用带有Pig的分布式缓存

Viv*_*dey 5 hadoop apache-pig elastic-map-reduce

我正在尝试在Amazon的Elastic Map Reduce上运行我的Pig脚本(使用UDF).我需要在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将文件存储在我的s3存储桶/path/to/myfile.txt中

但是,在运行我的Pig工作时,我看到一个例外:

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

所以,我的问题是:在亚马逊的EMR上运行pig脚本时,如何使用分布式缓存文件?

编辑:我发现pig-0.6与pig-0.9不同,它没有一个名为getCacheFiles()的函数.亚马逊不支持pig-0.6,因此我需要找出一种不同的方式来获得0.6的分布式缓存工作

cab*_*bad 0

我认为将这个额外的参数添加到 Pig 命令行调用应该可以工作(使用 s3 或 s3n,具体取决于文件的存储位置):

\n\n
\xe2\x80\x93cacheFile s3n://bucket_name/file_name#cache_file_name\n
Run Code Online (Sandbox Code Playgroud)\n\n

您应该能够在创建作业流程时将其添加到“额外参数”框中。

\n