2012-06-16 24 views
12

Có thể có nhiều đầu vào với nhiều trình ánh xạ khác nhau trong Hadoop MapReduce không? Mỗi lớp bản đồ hoạt động trên một bộ đầu vào khác nhau, nhưng tất cả chúng sẽ phát ra các cặp khóa-giá trị được tiêu thụ bởi cùng một bộ giảm tốc. Lưu ý rằng tôi không nói về những người lập bản đồ chuỗi ở đây, tôi đang nói về việc chạy các trình lập bản đồ khác nhau song song, không phải tuần tự.Có thể có nhiều đầu vào với nhiều trình ánh xạ khác nhau trong Hadoop MapReduce không?

Trả lời

13

Đây được gọi là tham gia.

Bạn muốn sử dụng các trình lập bản đồ và bộ giảm tốc trong gói bản đồ. * (Cũ hơn nhưng vẫn được hỗ trợ). Các gói mới hơn (mapreduce. *) Chỉ cho phép nhập một bản đồ. Với các gói có bản đồ, bạn sử dụng lớp MultipleInputs để xác định tham gia:

MultipleInputs.addInputPath(jobConf, 
        new Path(countsSource),  
        SequenceFileInputFormat.class, 
        CountMapper.class); 
MultipleInputs.addInputPath(jobConf, 
        new Path(dictionarySource), 
        SomeOtherInputFormat.class, 
        TranslateMapper.class); 

jobConf.setJarByClass(ReportJob.class); 
jobConf.setReducerClass(WriteTextReducer.class); 

jobConf.setMapOutputKeyClass(Text.class); 
jobConf.setMapOutputValueClass(WordInfo.class); 

jobConf.setOutputKeyClass(Text.class); 
jobConf.setOutputValueClass(Text.class); 
+5

Apis mới hơn ('mapreduce' không' mapred') có 'MultipleInputs': http://hadoop.apache.org/common/docs/r1.0.3/api/org/apache/hadoop/mapreduce/lib /input/MultipleInputs.html –

+0

@Donald Miner: Hoàn toàn đúng. –

+0

@DonaldMiner Một số phiên bản có, nhưng có vẻ như ít nhất 0.20.x không, ví dụ: lưu ý việc thiếu MultipleInputs tại đây: http://hadoop.apache.org/docs/r0.20.205.0/api/org/apache/hadoop/mapreduce/lib/input/ – kabuko

2

Tôi sẽ trả lời câu hỏi của bạn bằng câu hỏi, 2 câu trả lời và đề xuất chống đề xuất.

Câu hỏi đặt ra là: bạn thấy lợi ích gì khi chạy các công việc bản đồ không đồng nhất song song, ngược lại với việc chạy chúng trong hàng loạt, xuất ra các kết quả đồng nhất có thể xáo trộn đúng cách? Ý tưởng để tránh đi qua cùng một hồ sơ hai lần, một lần với một bản đồ nhận dạng? Câu trả lời đầu tiên là lên lịch cả hai công việc chỉ dành cho người lập bản đồ, mỗi nửa số hạm đội của bạn (hoặc bất kỳ tỷ lệ nào phù hợp nhất với kích thước dữ liệu đầu vào), xuất ra kết quả đồng nhất, tiếp theo là công việc giảm tốc thực hiện phép nối.

Câu trả lời thứ hai là tạo một InputFormat tùy chỉnh có thể nhận biết và chuyển đổi cả hai hương vị của đầu vào không đồng nhất. Điều này cực kỳ xấu xí, nhưng nó sẽ cho phép bạn tránh được bản đồ nhận dạng không cần thiết của đề xuất đầu tiên.

Đề xuất chống là không sử dụng API Hadoop không được chấp nhận từ câu trả lời của Chris. Hadoop là rất trẻ, nhưng các API đang ổn định xung quanh hương vị "mới". Bạn sẽ đến phiên bản cuối cùng.

+0

Lý do để chạy nhiều người vẽ bản đồ là bạn có thể thực hiện một hoạt động phẳng như được đưa ra trong giấy FlumeJava. Đầu ra từ những người lập bản đồ khác nhau có thể tham gia vào cùng một hoạt động trộn. – tibbe

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