Trong lập trình Map Reduce, giai đoạn giảm có xáo trộn, sắp xếp và giảm bớt như các phần con của nó. Sắp xếp là một công việc tốn kém.
Mục đích của giai đoạn xáo trộn và sắp xếp trong bộ rút gọn trong Lập trình rút gọn bản đồ là gì?
Trong lập trình Map Reduce, giai đoạn giảm có xáo trộn, sắp xếp và giảm bớt như các phần con của nó. Sắp xếp là một công việc tốn kém.
Mục đích của giai đoạn xáo trộn và sắp xếp trong bộ rút gọn trong Lập trình rút gọn bản đồ là gì?
Câu trả lời:
Trước hết shuffling
là quá trình truyền dữ liệu từ bộ lập bản đồ đến bộ giảm tải, vì vậy tôi nghĩ rõ ràng rằng nó là cần thiết cho bộ rút gọn, vì nếu không, họ sẽ không thể có bất kỳ đầu vào nào (hoặc đầu vào từ mọi trình lập bản đồ) . Việc xáo trộn có thể bắt đầu ngay cả trước khi giai đoạn bản đồ kết thúc, để tiết kiệm thời gian. Đó là lý do tại sao bạn có thể thấy trạng thái giảm lớn hơn 0% (nhưng nhỏ hơn 33%) khi trạng thái bản đồ chưa phải là 100%.
Sorting
tiết kiệm thời gian cho bộ giảm tốc, giúp nó dễ dàng phân biệt khi nào một tác vụ giảm mới nên bắt đầu. Nó chỉ đơn giản là bắt đầu một tác vụ giảm mới, khi khóa tiếp theo trong dữ liệu đầu vào được sắp xếp khác với khóa trước đó, nói một cách đơn giản. Mỗi tác vụ rút gọn lấy một danh sách các cặp khóa-giá trị, nhưng nó phải gọi phương thức Reduce () lấy đầu vào là khóa-danh sách (giá trị), vì vậy nó phải nhóm các giá trị theo khóa. Thật dễ dàng để làm như vậy, nếu dữ liệu đầu vào được sắp xếp trước (cục bộ) trong giai đoạn bản đồ và chỉ cần hợp nhất được sắp xếp trong giai đoạn thu gọn (vì bộ giảm tải lấy dữ liệu từ nhiều người lập bản đồ).
Partitioning
, mà bạn đã đề cập trong một trong các câu trả lời, là một quá trình khác. Nó xác định cặp rút gọn (khóa, giá trị) nào, đầu ra của giai đoạn bản đồ, sẽ được gửi. Trình phân vùng mặc định sử dụng hàm băm trên các khóa để phân phối chúng cho các tác vụ thu gọn, nhưng bạn có thể ghi đè nó và sử dụng Trình phân vùng tùy chỉnh của riêng bạn.
Một nguồn thông tin tuyệt vời cho các bước này là hướng dẫn Yahoo này .
Một đại diện đồ họa đẹp của điều này như sau (xáo trộn được gọi là "bản sao" trong hình này):
Lưu ý rằng shuffling
và hoàn toàn sorting
không được thực hiện nếu bạn chỉ định bộ giảm không (setNumReduceTasks (0)). Sau đó, công việc MapReduce dừng lại ở giai đoạn bản đồ và giai đoạn bản đồ không bao gồm bất kỳ loại sắp xếp nào (vì vậy ngay cả giai đoạn bản đồ cũng nhanh hơn).
CẬP NHẬT: Vì bạn đang tìm kiếm thứ gì đó chính thức hơn, bạn cũng có thể đọc cuốn sách "Hadoop: The Definitive Guide" của Tom White. Đây là phần thú vị cho câu hỏi của bạn.
Tom White là người cam kết Apache Hadoop từ tháng 2 năm 2007 và là thành viên của Tổ chức phần mềm Apache, vì vậy tôi đoán nó khá đáng tin cậy và chính thức ...
Hãy xem lại các giai đoạn chính của chương trình Mapreduce.
Các giai đoạn bản đồ được thực hiện bởi người vẽ bản đồ. Trình lập bản đồ chạy trên các cặp khóa / giá trị đầu vào không được sắp xếp. Mỗi trình ánh xạ phát ra không, một hoặc nhiều cặp khóa / giá trị đầu ra cho mỗi cặp khóa / giá trị đầu vào.
Các giai đoạn kết hợp được thực hiện bằng tổ hợp. Bộ kết hợp phải kết hợp các cặp khóa / giá trị với cùng một khóa. Mỗi bộ kết hợp có thể chạy không, một lần hoặc nhiều lần.
Các giai đoạn xáo trộn và sắp xếp được thực hiện bởi framework. Dữ liệu từ tất cả các trình ánh xạ được nhóm theo khóa, được phân chia giữa các trình giảm bớt và được sắp xếp theo khóa. Mỗi bộ rút gọn nhận được tất cả các giá trị được liên kết với cùng một khóa. Lập trình viên có thể cung cấp các chức năng so sánh tùy chỉnh để sắp xếp và một trình phân vùng để phân chia dữ liệu.
Bộ phân vùng quyết định bộ rút gọn nào sẽ nhận được một cặp giá trị khóa cụ thể.
Bộ giảm thiểu thu được các cặp khóa / [danh sách giá trị] được sắp xếp, được sắp xếp theo khóa. Danh sách giá trị chứa tất cả các giá trị có cùng một khóa do người lập bản đồ tạo ra. Mỗi bộ giảm phát ra 0, một hoặc nhiều cặp khóa / giá trị đầu ra cho mỗi cặp khóa / giá trị đầu vào .
Hãy xem bài viết javacodegeeks này của Maria Jurcovicova và bài viết mssqltips của Datta để hiểu rõ hơn
Dưới đây là hình ảnh từ bài viết của safaribooksonline
ie
chuỗi trong Bộ giảm thiểu và Đầu ra thực sự nên như vậy is
.
Tôi chỉ nghĩ đến việc bổ sung một số điểm còn thiếu trong các câu trả lời trên. Sơ đồ được lấy từ đây nói rõ những gì đang thực sự diễn ra.
Nếu tôi nói lại mục đích thực sự của
Tách: Cải thiện xử lý song song bằng cách phân phối tải xử lý trên các nút khác nhau (Người lập bản đồ), điều này sẽ tiết kiệm thời gian xử lý tổng thể.
Kết hợp: Thu hẹp đầu ra của mỗi Người lập bản đồ. Nó sẽ tiết kiệm thời gian dành cho việc di chuyển dữ liệu từ nút này sang nút khác.
Sắp xếp (Shuffle & Sort): Giúp thời gian chạy dễ dàng lên lịch (sinh ra / bắt đầu) các bộ giảm tốc mới, trong khi xem qua danh sách mục đã sắp xếp, bất cứ khi nào khóa hiện tại khác với khóa trước đó, nó có thể tạo ra một bộ giảm tốc mới .
Một số yêu cầu xử lý dữ liệu hoàn toàn không cần sắp xếp. Syncsort đã làm cho việc phân loại trong Hadoop có thể cắm được. Đây là một blog hay của họ về phân loại. Quá trình di chuyển dữ liệu từ người lập bản đồ các gia giảm được gọi là xáo trộn, kiểm tra này bài viết để biết thêm thông tin về giống nhau.
Tôi luôn cho rằng điều này là cần thiết vì đầu ra từ trình ánh xạ là đầu vào cho bộ giảm tốc, vì vậy nó được sắp xếp dựa trên không gian phím và sau đó được chia thành các nhóm cho mỗi đầu vào bộ giảm tốc. Bạn muốn đảm bảo tất cả các giá trị giống nhau của một Khóa kết thúc trong cùng một nhóm đi đến bộ giảm tốc để chúng được giảm cùng nhau. Không có lý do gì khi gửi K1, V2 và K1, V4 đến các bộ giảm tốc khác nhau vì chúng cần phải ở cùng nhau để được giảm bớt.
Cố gắng giải thích nó càng đơn giản càng tốt
Xáo trộn là quá trình mà dữ liệu trung gian từ các trình ánh xạ được chuyển đến 0,1 hoặc nhiều bộ giảm thiểu. Mỗi bộ giảm tốc nhận được 1 hoặc nhiều khóa và các giá trị liên quan của nó tùy thuộc vào số bộ giảm tốc (đối với tải cân bằng). Hơn nữa, các giá trị được liên kết với mỗi khóa được sắp xếp cục bộ.
Chỉ có hai điều mà MapReduce thực hiện TỰ NHIÊN: Sắp xếp và (thực hiện theo sắp xếp) GroupBy có thể mở rộng.
Hầu hết các ứng dụng và Mẫu thiết kế trên MapReduce được xây dựng dựa trên hai hoạt động này, được cung cấp bằng cách trộn và sắp xếp.
Đây là một bài đọc hay. Hy vọng nó giúp. Về cách sắp xếp mà bạn đang quan tâm, tôi nghĩ đó là cho hoạt động hợp nhất trong bước cuối cùng của Bản đồ. Khi thao tác bản đồ được thực hiện và cần ghi kết quả vào đĩa cục bộ, một phép hợp nhất sẽ được vận hành trên các phần tách được tạo từ bộ đệm. Và đối với hoạt động hợp nhất, việc sắp xếp từng phân vùng theo hướng nâng cao là hữu ích.
Vâng, Trong MapReduce có hai cụm từ quan trọng gọi là Mapper và giảm cả hai đều là quá quan trọng, nhưng giảm tốc là bắt buộc. Trong một số chương trình, bộ giảm tốc là tùy chọn. Bây giờ đến với câu hỏi của bạn. Trộn và sắp xếp là hai thao tác quan trọng trong Mapreduce. Khung công tác Hadoop đầu tiên lấy dữ liệu có cấu trúc / phi cấu trúc và tách dữ liệu thành Khóa, Giá trị.
Bây giờ chương trình Mapper phân tách và sắp xếp dữ liệu thành các khóa và giá trị cần xử lý. Tạo giá trị Khóa 2 và giá trị 2. Các giá trị này nên xử lý và sắp xếp lại theo thứ tự thích hợp để có được giải pháp mong muốn. Bây giờ việc xáo trộn và sắp xếp này được thực hiện trong hệ thống cục bộ của bạn (Framework hãy chăm sóc nó) và xử lý trong hệ thống cục bộ sau khi khuôn khổ quá trình dọn dẹp dữ liệu trong hệ thống cục bộ. Đồng ý
Ở đây chúng tôi cũng sử dụng bộ kết hợp và phân vùng để tối ưu hóa quá trình xáo trộn và sắp xếp này. Sau khi sắp xếp hợp lý, các giá trị chính đó sẽ được chuyển đến Bộ giảm tốc để nhận được đầu ra của Khách hàng mong muốn. Cuối cùng Bộ giảm tốc có được đầu ra mong muốn.
K1, V1 -> K2, V2 (chúng ta sẽ viết chương trình Mapper), -> K2, V '(ở đây xáo trộn và làm mềm dữ liệu) -> K3, V3 Tạo đầu ra. K4, V4.
Xin lưu ý rằng tất cả các bước này chỉ là thao tác logic, không thay đổi dữ liệu ban đầu.
Câu hỏi của bạn: Mục đích của giai đoạn xáo trộn và sắp xếp trong bộ rút gọn trong Lập trình rút gọn bản đồ là gì?
Câu trả lời ngắn gọn: Để xử lý dữ liệu để có được đầu ra mong muốn. Xáo trộn là tổng hợp dữ liệu, giảm là nhận được đầu ra mong đợi.