Thuật toán sắp xếp MapReduce hoạt động như thế nào?


110

Một trong những ví dụ chính được sử dụng để chứng minh sức mạnh của MapReduce là điểm chuẩn Terasort . Tôi gặp khó khăn khi hiểu những điều cơ bản về thuật toán sắp xếp được sử dụng trong môi trường MapReduce.

Đối với tôi, việc sắp xếp chỉ đơn giản là xác định vị trí tương đối của một phần tử trong mối quan hệ với tất cả các phần tử khác. Vì vậy, sắp xếp liên quan đến việc so sánh "mọi thứ" với "mọi thứ". Thuật toán sắp xếp trung bình của bạn (nhanh chóng, bong bóng, ...) chỉ đơn giản thực hiện điều này một cách thông minh.

Theo suy nghĩ của tôi, chia tập dữ liệu thành nhiều phần có nghĩa là bạn có thể sắp xếp một phần duy nhất và sau đó bạn vẫn phải tích hợp các phần này vào tập dữ liệu được sắp xếp đầy đủ 'hoàn chỉnh'. Với tập dữ liệu terabyte được phân phối trên hàng nghìn hệ thống, tôi kỳ vọng đây sẽ là một nhiệm vụ lớn.

Vậy thực hư việc này như thế nào? Thuật toán sắp xếp MapReduce này hoạt động như thế nào?

Cảm ơn đã giúp tôi hiểu.

Câu trả lời:


61

Dưới đây là một số chi tiết về việc triển khai Hadoop cho Terasort :

TeraSort là một bản đồ tiêu chuẩn / sắp xếp giảm, ngoại trừ trình phân vùng tùy chỉnh sử dụng danh sách được sắp xếp gồm N-1 khóa lấy mẫu xác định phạm vi khóa cho mỗi lần giảm. Đặc biệt, tất cả các khóa như sample [i - 1] <= key <sample [i] được gửi để giảm i. Điều này đảm bảo rằng sản lượng của giảm i đều nhỏ hơn sản lượng của giảm i + 1. "

Vì vậy, mẹo của họ là ở cách họ xác định các phím trong giai đoạn lập bản đồ. Về cơ bản, chúng đảm bảo rằng mọi giá trị trong một bộ giảm tốc duy nhất được đảm bảo được 'sắp xếp trước' so với tất cả các bộ giảm tốc khác.

Tôi tìm thấy tài liệu tham khảo thông qua Bài đăng trên Blog của James Hamilton .


3

Tham khảo Google: MapReduce: Xử lý dữ liệu được đơn giản hóa trên các cụm lớn

Xuất hiện tại :
OSDI'04: Hội nghị chuyên đề thứ sáu về thiết kế và triển khai hệ điều hành,
San Francisco, CA, tháng 12 năm 2004.

Liên kết đó có tham chiếu PDF và HTML-Slide.

Ngoài ra còn có một trang Wikipedia với mô tả với các tài liệu tham khảo thực hiện.

Cũng chỉ trích,

David DeWitt và Michael Stonebraker, những chuyên gia tiên phong trong cơ sở dữ liệu song song và không chia sẻ kiến ​​trúc, đã đưa ra một số khẳng định gây tranh cãi về phạm vi rộng của các vấn đề mà MapReduce có thể được sử dụng. Họ gọi giao diện của nó là quá thấp và đặt câu hỏi liệu nó có thực sự đại diện cho sự thay đổi mô hình mà những người ủng hộ nó đã tuyên bố hay không. Họ thách thức những tuyên bố của những người đề xuất MapReduce về tính mới, trích dẫn Teradata là một ví dụ về nghệ thuật trước đây đã tồn tại hơn hai thập kỷ; họ so sánh các lập trình viên MapReduce với các lập trình viên Codasyl, lưu ý rằng cả hai đều "viết bằng ngôn ngữ cấp thấp thực hiện thao tác ghi ở cấp độ thấp". Việc sử dụng các tệp đầu vào và thiếu hỗ trợ lược đồ của MapReduce ngăn cản các cải tiến hiệu suất được kích hoạt bởi các tính năng hệ thống cơ sở dữ liệu phổ biến như B-tree và phân vùng băm,


Tôi hiểu (hầu hết) các khái niệm về MapReduce như được mô tả trong các tài liệu được đề cập. Tôi đang cố gắng hiểu thuật toán sắp xếp.
Niels Basjes,

1

Tôi đã có cùng một câu hỏi khi đọc bài báo MapReduce của Google. Câu trả lời của @Yuval F đã giải quyết được khá nhiều câu đố của tôi.

Một điều tôi nhận thấy khi đọc bài báo là điều kỳ diệu xảy ra trong việc phân vùng (sau bản đồ, trước khi giảm).

Bài báo sử dụng hash(key) mod Rlàm ví dụ phân vùng, nhưng đây không phải là cách duy nhất để phân vùng dữ liệu trung gian cho các tác vụ giảm khác nhau.

Chỉ cần thêm điều kiện biên vào câu trả lời của @Yuval F để làm cho nó hoàn chỉnh: giả sử min (S) và max (S) là khóa tối thiểu và khóa tối đa trong số các khóa được lấy mẫu; tất cả các khóa <min (S) được phân vùng cho một tác vụ giảm; ngược lại, tất cả các phím> = max (S) được phân vùng cho một tác vụ giảm.

Không có giới hạn cứng đối với các phím lấy mẫu, như tối thiểu hoặc tối đa. Chỉ là, các phím R này được phân phối đồng đều hơn trong tất cả các phím, hệ thống phân tán này "song song" hơn và ít có khả năng một toán tử giảm gặp vấn đề tràn bộ nhớ.


0

Chỉ đoán ...

Với một bộ dữ liệu khổng lồ, bạn sẽ phân chia dữ liệu thành một số phần để xử lý song song (có thể theo số bản ghi tức là bản ghi 1 - 1000 = phân vùng 1, v.v.).

Gán / lập lịch mỗi phân vùng cho một nút cụ thể trong cụm.

Mỗi nút cụm sẽ phá vỡ (ánh xạ) phân vùng thành phân vùng nhỏ của riêng nó, có lẽ theo thứ tự bảng chữ cái chính. Vì vậy, trong phân vùng 1, hãy lấy cho tôi tất cả những thứ bắt đầu bằng A và xuất nó vào phân vùng nhỏ A của x. Tạo A (x) mới nếu hiện tại đã có A (x). Thay thế x bằng số thứ tự (có lẽ đây là công việc của bộ lập lịch để làm như vậy). Tức là Cung cấp cho tôi id duy nhất A (x) tiếp theo.

Bàn giao (lịch trình) các công việc được hoàn thành bởi người lập bản đồ (bước trước) cho các nút cụm "giảm". Sau đó, cụm nút rút gọn sẽ tinh chỉnh thêm loại của từng phần A (x) mà sẽ chỉ xảy ra khi các tác vụ của người lập bản đồ được thực hiện (Không thể thực sự bắt đầu sắp xếp tất cả các từ bắt đầu từ w / A khi vẫn có khả năng vẫn còn sẽ là một phân vùng mini khác đang được tạo). Xuất ra kết quả trong phân đoạn được sắp xếp cuối cùng (tức là Đã sắp xếp-A, Đã sắp xếp-B, v.v.)

Sau khi hoàn tất, hãy kết hợp phân vùng đã sắp xếp thành một tập dữ liệu duy nhất một lần nữa. Tại thời điểm này, nó chỉ là một ghép đơn giản của n tệp (trong đó n có thể là 26 nếu bạn chỉ làm A - Z), v.v.

Có thể có các bước trung gian giữa ... Tôi không chắc :). Tức là ánh xạ thêm và giảm sau bước giảm ban đầu.

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.