Tôi đang đọc về MapReduce và điều sau đây gây nhầm lẫn cho tôi.Sắp xếp dữ liệu lớn bằng cách sử dụng MapReduce/Hadoop
Giả sử chúng tôi có một tệp với 1 triệu mục (số nguyên) và chúng tôi muốn sắp xếp chúng bằng cách sử dụng MapReduce. Cách tôi hiểu để đi về nó là như sau:
Viết hàm bản đồ sắp xếp số nguyên. Vì vậy, khung công tác sẽ chia tệp đầu vào thành nhiều phần và sẽ cung cấp cho họ những người lập bản đồ khác nhau. Mỗi người vẽ bản đồ sẽ sắp xếp dữ liệu của họ độc lập với nhau. Khi tất cả các bản đồ được thực hiện, chúng tôi sẽ chuyển từng kết quả của họ tới Reducer và nó sẽ kết hợp kết quả và cho tôi kết quả cuối cùng.
Nghi ngờ của tôi là, nếu chúng ta có một trình giảm tốc, thì nó sẽ tận dụng khung phân phối như thế nào, nếu cuối cùng, chúng ta phải kết hợp kết quả ở một nơi ?. Vấn đề này sẽ giảm xuống để hợp nhất 1 triệu mục ở cùng một nơi. Có phải vậy hay tôi đang thiếu thứ gì đó?
Cảm ơn, Chander
Và bộ giảm tốc có thể bắt đầu cho kết quả khi nó nhận được kết quả đầu tiên từ mỗi người lập bản đồ cho phép (trong trường hợp sắp xếp hợp nhất) thực hiện quá trình (sáp nhập) một cải tiến lớn về thời gian và trí nhớ. – helios
Nó chỉ liên tục nếu bạn luôn sử dụng cùng một số người lập bản đồ. Nói một cách tự nhiên, đó là O (M log N) để hợp nhất các phần tử M trong N danh sách nếu bạn sử dụng một min-heap, và O (M * N) cho cách tiếp cận "ngây thơ". Nhưng vâng, như bạn mong đợi M >> N, về cơ bản là tuyến tính. – SquareCog
Ngoài ra còn có một cnsideration thực tế trong thuật ngữ "ngắn" tài nguyên của bạn tức là lõi CPU và hộp, là hằng số và nó đòi hỏi sự chấp thuận quản lý để tăng M. Do đó M trông giống như kim tự tháp Aztec với một số bước 'liên tục'. –