2012-06-20 19 views
8

Tôi có hai lớp java riêng biệt để thực hiện hai công việc Mapreduce khác nhau. Tôi có thể chạy chúng một cách độc lập. Các tệp đầu vào mà chúng đang hoạt động giống nhau cho cả hai công việc. Vì vậy, câu hỏi của tôi là liệu chúng ta có thể xác định hai người vẽ bản đồ và hai gia giảm trong một lớp java nhưHadoop MapReduce: Có thể xác định hai trình lập bản đồ và bộ giảm tốc trong một lớp công việc hadoop?

mapper1.class 
mapper2.class 
reducer1.class 
reducer2.class 

và sau đó như

job.setMapperClass(mapper1.class); 
job.setmapperClass(mapper2.class); 
job.setCombinerClass(reducer1); 
job.setCombinerClass(reducer2); 
job.setReducerClass(reducer1); 
job.setReducerClass(reducer2); 

Do các phương pháp thiết lập thực sự ghi đè lên những người trước đây hoặc thêm mới cái gì? Tôi đã thử mã, nhưng nó thực hiện các lớp học mới nhất chỉ mang lại cho tôi nghĩ rằng nó ghi đè. Nhưng phải có một cách để làm điều này đúng không?

Lý do tại sao tôi hỏi đây là tôi chỉ có thể đọc các tệp đầu vào một lần (một I/O) và sau đó xử lý hai bản đồ giảm công việc. Tôi cũng muốn biết làm thế nào tôi có thể viết các tập tin đầu ra thành hai thư mục khác nhau. Hiện tại, cả hai công việc đều tách biệt và yêu cầu đầu vào và thư mục đầu ra.

Trả lời

1

Bạn có thể sử dụng các lớp MultipleInputs và MultipleOutputs cho điều này, nhưng đầu ra của cả hai người vẽ bản đồ sẽ đi đến cả hai bộ giảm tốc. Nếu luồng dữ liệu cho hai cặp bản đồ/bộ giảm tốc thực sự độc lập với nhau thì hãy giữ chúng thành hai công việc riêng biệt. Bằng cách này, MultipleInputs sẽ chạy các trình ánh xạ của bạn với thay đổi ngoài, nhưng các trình giảm sẽ phải được sửa đổi để sử dụng MultipleOutputs

+0

+1 Điều này có ý nghĩa. – pyfunc

+0

@Chris Cả hai cặp MR chia sẻ cùng một đầu vào, điều này khiến tôi nghĩ đến việc chỉ đọc được dữ liệu đầu vào một lần. Người lập bản đồ làm việc với các khóa khác nhau. Điều này có nghĩa là các khóa cho một người lập bản đồ sẽ khác với các khóa cho người lập bản đồ khác. Lý do tại sao tôi nghĩ là tôi có thể đọc các tập tin đầu vào chỉ một lần để xử lý chúng trong hai cặp MR khác nhau hoạt động độc lập. – Bob

0

Theo hiểu biết của tôi, từ việc sử dụng bản đồ giảm với luồng Hadoop, bạn có thể chuỗi nhiều người lập bản đồ và bộ giảm tốc nơi người dùng tiêu thụ đầu ra của một số khác

Nhưng bạn không thể chạy các trình lập bản đồ và bộ giảm tốc khác nhau cùng một lúc. Bản thân những người lập bản đồ phụ thuộc vào không có khối nào được xử lý. Mapper nên được khởi tạo dựa trên quyết định đó và không phải là sự đa dạng của người lập bản đồ có sẵn cho công việc.

[Chỉnh sửa: Dựa trên nhận xét của bạn]

Tôi không nghĩ điều đó là có thể. Bạn có thể chuỗi (nơi mà các bộ giảm sẽ nhận được tất cả các đầu vào từ những người lập bản đồ. Bạn có thể trình tự chúng nhưng bạn không thể chạy độc lập bộ bản đồ và bộ giảm tốc độc lập. những người lập bản đồ vào cả hai bộ giảm tốc của bạn, bạn có thể làm cho đầu ra của người lập bản đồ (K, V) là cách bạn có thể phân biệt với bộ giảm tốc của bạn. chọn lọc (K, V) cặp.

+0

@Bob: Tôi đã chỉnh sửa câu trả lời dựa trên nhận xét của bạn – pyfunc

+0

Tuyệt vời, không nghĩ về nó như một khả năng. Nhưng làm thế nào tôi có thể tách các tập tin đầu ra, nói rằng tôi có thể xử lý nó trong thực hiện giảm tốc của tôi, tôi cần phải bằng cách nào đó sau đó xác định các phím được ghi vào đâu. – Bob

+0

Không Bob: Bạn không thể làm điều đó. Những gì bạn có thể làm trong map1, map2 là gửi K, V là K, (map1, V) để giảm tốc bạn biết dữ liệu đến từ đâu. Mỗi bộ giảm sẽ tạo ra tệp riêng của nó trong đầu ra công việc để đầu ra của bạn đã được tách biệt. – pyfunc

11

bạn có thể có nhiều người vẽ bản đồ, nhưng trong một công việc, bạn chỉ có thể có một giảm. và các tính năng bạn cần là MultipleInput, MultipleOutputGenericWritable.

Sử dụng MultipleInput, bạn có thể đặt trình ánh xạ và inputFormat tương ứng. Đây là post của tôi về cách sử dụng nó.

Sử dụng GenericWritable, bạn có thể tách các lớp đầu vào khác nhau trong trình giảm tốc. Đây là post của tôi về cách sử dụng nó.

Sử dụng MultipleOutput, bạn có thể xuất các lớp khác nhau trong cùng một trình giảm tốc.

+0

Thx cho nhận xét của bạn! Tôi sẽ thử chúng. – Bob

0

Lớp ChainMapper cho phép sử dụng nhiều lớp Mapper trong một tác vụ Bản đồ. Ví dụ: xin xem here.

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