MapReduce có gì khác hơn là một ứng dụng phân chia và chinh phục không?


26

Chia một vấn đề cho những vấn đề nhỏ hơn cho đến khi các vấn đề riêng lẻ có thể được giải quyết một cách độc lập và sau đó kết hợp chúng để trả lời câu hỏi ban đầu được gọi là kỹ thuật thiết kế thuật toán phân chia và chinh phục . [Xem: Giới thiệu về thuật toán của CLR]

Gần đây, cách tiếp cận này để giải quyết các vấn đề tính toán, đặc biệt là trong miền của các tập dữ liệu rất lớn đã được gọi là MapReduce thay vì phân chia và chinh phục.

Câu hỏi của tôi là như sau: MapReduce có gì khác hơn là một khung độc quyền dựa trên phương pháp phân chia và chinh phục, hoặc có những chi tiết nào làm cho nó trở nên độc đáo ở một khía cạnh nào đó không?


Phân chia và chinh phục là một lớp các thuật toán. MapReduce là một ví dụ về lớp đó.
Martin Spamer

Câu trả lời:


28

Nếu bạn đang hỏi về kiến ​​trúc MapReduce, thì đó chỉ là một kỹ thuật phân chia và chinh phục . Tuy nhiên, bất kỳ kiến ​​trúc MapReduce hữu ích nào cũng sẽ có hàng núi cơ sở hạ tầng khác để "phân chia", "chinh phục" một cách hiệu quả và cuối cùng là "giảm" vấn đề được đặt ra. Với một triển khai MapReduce lớn (1000 nút tính toán), các bước này để phân vùng công việc, tính toán một cái gì đó, và cuối cùng thu thập tất cả các kết quả là không tầm thường. Những thứ như cân bằng tải, phát hiện nút chết, lưu trạng thái tạm thời (đối với các sự cố chạy dài), là những vấn đề khó.


1
Cách để "phân chia", "chinh phục" một cách hiệu quả, và cuối cùng là "giảm bớt" vấn đề về phạm vi - điều này gây hiểu lầm: Bước bản đồ của Bước không yêu cầu người giải D & C (vì dữ liệu độc lập hoàn toàn), bạn chỉ có thể phân phối các khối công việc sử dụng một số loại lịch trình; bước giảm không yêu cầu D & C.
Konrad Rudolph

4
Từ "chỉ" là sai lệch trong bối cảnh này.

Như đã nêu, câu trả lời này không chỉ đơn thuần là sai lệch, mà hoàn toàn sai. MapReduce chắc chắn không "chỉ là một kỹ thuật phân chia và chinh phục".
Jerry Coffin

10

MapReduce là một khung để triển khai các thuật toán phân chia và chinh phục theo cách cực kỳ có thể mở rộng , bằng cách tự động phân phối các đơn vị công việc cho các nút trong một cụm máy tính lớn tùy ý tự động xử lý các lỗi của các nút riêng lẻ bằng cách phân phối lại đơn vị công việc đến một nút khác.

Đây không phải là một khái niệm siêu tinh vi, mà là một phần cơ sở hạ tầng rất hữu ích.


10

MapReduce phân kỳ từ hầu hết các hệ thống phân chia và chinh phục theo một cách khá cơ bản, nhưng một điều đơn giản đến mức nhiều người gần như bỏ lỡ nó. Thiên tài thực sự của nó là trong việc gắn thẻ các kết quả trung gian.

Trong một hệ thống phân chia và chinh phục điển hình (trước đó), bạn phân chia công việc theo kiểu thanh toán, thực hiện các gói công việc song song và sau đó hợp nhất các kết quả từ công việc đó lại một cách an toàn.

Trong MapReduce, bạn phân chia công việc theo kiểu thanh toán, thực hiện các gói công việc song song và gắn thẻ kết quả để cho biết kết quả nào đi với kết quả nào khác. Việc hợp nhất sau đó là nối tiếp cho tất cả các kết quả với cùng một thẻ, nhưng có thể được thực hiện song song cho các kết quả có các thẻ khác nhau.

Trong hầu hết các hệ thống trước đó, bước hợp nhất trở thành nút cổ chai cho tất cả các nhiệm vụ thực sự tầm thường nhất. Với MapReduce nó có thể vẫn được nếu bản chất của nhiệm vụ yêu cầu tất cả sáp nhập được thực hiện nối tiếp. Tuy nhiên, nếu tác vụ cho phép một số mức độ kết hợp song song các kết quả, thì MapReduce đưa ra một cách đơn giản để tận dụng khả năng đó. Hầu hết các hệ thống khác thực hiện một trong hai điều sau: hoặc thực hiện tất cả các phép hợp nhất chỉ vì nó thể cần thiết cho một số tác vụ hoặc nếu không thì xác định tĩnh việc hợp nhất song song cho một tác vụ cụ thể. MapReduce cung cấp cho bạn đủ dữ liệu ở bước hợp nhất để tự động lên lịch song song nhiều nhất có thể, trong khi vẫn đảm bảo (giả sử bạn không mắc lỗi trong bước ánh xạ) rằng sự duy trì được duy trì.

Cũng lưu ý rằng trong MapReduce, nó ngầm hiểu rằng tất cả các bước có thể được đệ quy, vì vậy tôi có thể có một bước ánh xạ ban đầu phá vỡ một nhiệm vụ lớn thành 5 nhiệm vụ nhỏ hơn có thể được thực hiện song song - nhưng mỗi bước có thể bật) được ánh xạ ra một số nhiệm vụ song song nhỏ hơn, v.v.

Điều này dẫn đến một cấu trúc cây trên cả hai mặt ánh xạ và các mặt khử để nhanh chóng phá vỡ một nhiệm vụ lớn thành nhiều mảnh đủ để tận dụng nhiều máy móc.


7

MapReduce không chỉ đơn giản là một kỹ thuật phân chia và chinh phục, mặc dù nó có vẻ như vậy trong nhiều ví dụ.

Trong bước ánh xạ, bạn có thể và thường xuyên muốn thực hiện mối quan hệ một-nhiều. Do đó, bạn không chỉ đơn giản là chia thành các trường hợp.

Giữa bản đồ và thu nhỏ có một (tùy theo việc thực hiện) một bước sắp xếp hoặc băm. Hiệu quả của hoạt động này là vô cùng quan trọng đối với các yêu cầu tài nguyên tổng thể. Các chi tiết của nó là vô hình đối với các lập trình viên ứng dụng, nhưng bước này là trái tim của khung.

Các hoạt động giảm là một loại hợp nhất. Điều này có thể được coi là một cuộc chinh phục, nhưng trong thực tế có xu hướng là "phát ra dữ liệu để sử dụng sau" hoặc "lưu dữ liệu trong kho lưu trữ dữ liệu". (Lưu ý, nếu bạn có tập dữ liệu lớn, bạn thực sự muốn mọi thứ được phân phối, bao gồm cả kết quả đầu vào và kết quả cuối cùng. Vì vậy, kho lưu trữ khóa / giá trị có ý nghĩa như là một nơi để nhận đầu vào và lưu trữ đầu ra.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.