2011-11-22 25 views
5

Tôi đang cố gắng chạy tập lệnh Pig của tôi (sử dụng UDF) trên Bản đồ đàn hồi của Amazon Reduce. Tôi cần sử dụng một số tệp tĩnh từ bên trong UDF của mình.Sử dụng Cache phân tán với Pig trên bản đồ đàn hồi Giảm

tôi làm điều gì đó như thế này trong UDF của tôi:

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; 
    } 
} 

tôi đã lưu trữ các tập tin trong xô s3 tôi /path/to/myfile.txt

Tuy nhiên, trên chạy việc Pig của tôi, tôi thấy một ngoại lệ:

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

Vì vậy, câu hỏi của tôi là: làm thế nào để tôi sử dụng phân phối file cache khi chạy script lợn trên EMR amazon không?

EDIT: Tôi đã tìm ra rằng heo-0.6, không giống như pig-0.9 không có hàm gọi là getCacheFiles(). Amazon không hỗ trợ pig-0.6 và vì vậy tôi cần tìm ra cách khác để có được cache phân phối hoạt động ở 0.6

+0

Có thể bạn đã biết điều đó, nhưng đối với những người khác, Amazon hỗ trợ ngay bây giờ Pig 0.6 và 0.9.1 http://aws.amazon.com/elasticmapreduce/faqs/#pig-7 –

Trả lời

0

Tôi nghĩ rằng thêm arg này thêm vào lệnh gọi lệnh Pig sẽ hoạt động (với s3 hoặc s3n, tùy thuộc vào nơi tệp của bạn được lưu trữ):

–cacheFile s3n://bucket_name/file_name#cache_file_name 

Bạn sẽ có thể thêm điều đó vào hộp "Extra Args" khi tạo luồng công việc.

+0

@ vivek-pandey Câu trả lời của tôi có giải quyết được không vấn đề? – cabad

Các vấn đề liên quan