2010-03-29 33 views

Trả lời

31

Một khác biệt chính là F-J dường như được thiết kế để hoạt động trên một máy ảo Java, trong khi M-R được thiết kế rõ ràng để hoạt động trên một cụm máy lớn. Đây là những kịch bản rất khác nhau.

F-J cung cấp các cơ sở để phân vùng công việc thành một số nhiệm vụ, theo kiểu tìm kiếm đệ quy; nhiều tầng lớp, khả năng giao tiếp giữa các ngã ba ở giai đoạn này, nhiều chương trình truyền thống hơn. Không mở rộng (ít nhất là trong giấy) ngoài một máy. Tuyệt vời để tận dụng lợi thế của tám lõi của bạn.

M-R chỉ thực hiện một lần chia nhỏ, với các phần tách ánh xạ không nói chuyện lẫn nhau và sau đó giảm mọi thứ lại với nhau. Một cấp duy nhất, không có liên lạc giữa các phần cho đến khi giảm, và có thể mở rộng được. Tuyệt vời để tận dụng phần chia sẻ của đám mây của bạn.

+8

Cụ thể hơn, F-J cho phép người lao động đánh cắp các nhiệm vụ phụ từ hàng đợi của nhau. Điều này là không thể nếu chủ đề công nhân là trên các máy khác nhau (và do đó không có bộ nhớ chia sẻ.) – finnw

+2

Theo [MapReduce Wikipedia entry] (http://en.wikipedia.org/wiki/MapReduce), MR không nhất thiết bị giới hạn ở một cấp nhiệm vụ được chia đôi. –

+0

sự khác biệt giữa ngã ba/tham gia và bản đồ hóa bên ngoài bối cảnh của Java là gì? – user2001850

10

Có toàn bộ bài báo khoa học về chủ đề, Comparing Fork/Join and MapReduce.

Bài báo so sánh hiệu suất, khả năng mở rộng và khả năng lập trình của ba mô hình song song: fork/join, MapReduce và phương pháp lai. Những gì họ tìm thấy về cơ bản là Java fork/join có độ trễ khởi động thấp và cân bằng tốt cho đầu vào nhỏ (< 5MB), nhưng nó không thể xử lý đầu vào lớn hơn do hạn chế kích thước của bộ nhớ chia sẻ, kiến ​​trúc nút đơn. Mặt khác, MapReduce có thời gian trễ khởi động đáng kể (hàng chục giây), nhưng cũng có thể cân bằng tốt cho các đầu vào lớn hơn nhiều (> 100MB) trên một cụm tính toán.

Nhưng có rất nhiều thứ khác để đọc ở đó nếu bạn muốn.

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