2014-07-23 12 views
6

Tôi đang đọc Hadoop: The definitive guide 3rd edtition bởi Tom White. Nó là một nguồn tuyệt vời để tìm hiểu ruột của Hadoop, đặc biệt là Map-Reduce mà tôi quan tâm trongHiểu biết sâu sắc về công việc nội bộ của giai đoạn bản đồ trong một công việc giảm Map trong hadoop?

Từ cuốn sách, (trang 205):.

Shuffle và Sắp xếp

MapReduce làm cho đảm bảo rằng đầu vào cho mỗi bộ giảm tốc được sắp xếp theo khóa. Quá trình mà hệ thống thực hiện sắp xếp - và chuyển các kết quả đầu ra bản đồ tới các bộ giảm tốc làm đầu vào - được gọi là shuffle.

Điều tôi suy ra từ điều này, là trước khi các phím được gửi đến bộ giảm tốc, chúng được sắp xếp, cho biết đầu ra của giai đoạn bản đồ công việc được sắp xếp. xin lưu ý: Tôi không gọi nó là người lập bản đồ, vì một giai đoạn bản đồ bao gồm cả người lập bản đồ (được viết bởi lập trình viên) và cơ chế sắp xếp được xây dựng trong khung MR.


Các bản đồ Side

Mỗi nhiệm vụ bản đồ có một bộ nhớ đệm tròn mà nó viết đầu ra để. Bộ đệm là 100 MB theo mặc định, một kích thước có thể được điều chỉnh bằng cách thay đổi thuộc tính io.sort.mb. Khi nội dung của bộ đệm đạt đến một kích thước ngưỡng nhất định (io.sort.spill.per cent, mặc định 0.80 hoặc 80%), một chủ đề nền sẽ bắt đầu tràn nội dung vào đĩa. Các kết quả đầu ra của bản đồ sẽ tiếp tục được ghi vào bộ đệm trong khi tràn xảy ra, nhưng nếu bộ đệm được lấp đầy trong thời gian này, bản đồ sẽ chặn cho đến khi tràn hoàn tất.
Trước khi ghi vào đĩa, luồng đầu tiên chia dữ liệu thành các phân vùng tương ứng với bộ giảm mà cuối cùng chúng sẽ được gửi đến. Trong mỗi phân vùng, chuỗi mặt đất thực hiện sắp xếp trong bộ nhớ theo khóa và nếu có chức năng kết hợp, nó sẽ chạy trên đầu ra của sắp xếp. Việc chạy chức năng kết hợp tạo ra một bản đồ đầu ra nhỏ gọn hơn, do đó, có ít dữ liệu hơn để ghi vào đĩa cục bộ và để chuyển sang bộ giảm tốc.

Sự hiểu biết của tôi về đoạn trên là khi người lập bản đồ đang tạo cặp khóa-giá trị, cặp khóa-giá trị được phân đoạn và sắp xếp. Một ví dụ giả thuyết:

xem xét mapper-1 cho một chương trình soạn thảo văn bản số:

>mapper-1 contents 
partition-1 
    xxxx: 2 
    yyyy: 3 
partition-2 
    aaaa: 15 
    zzzz: 11 

(Lưu ý với trong mỗi dữ liệu phân vùng được sắp xếp theo chủ chốt, nhưng nó không phải là cần thiết rằng dữ liệu phân vùng-1 và dữ liệu phân vùng-2 của phải làm theo thứ tự tuần tự)


Tiếp tục đọc chương:

Mỗi khi bộ đệm đạt đến ngưỡng tràn, tệp tràn mới được tạo, vì vậy sau khi tác vụ bản đồ đã ghi bản ghi đầu ra cuối cùng của nó, có thể có một số tệp tràn. Trước khi tác vụ được hoàn tất, các tệp tràn sẽ được hợp nhất thành một tệp đầu ra được phân đoạn và sắp xếp đơn lẻ . Thuộc tính cấu hình io.sort.factor kiểm soát số lượng luồng tối đa để hợp nhất cùng một lúc; mặc định là 10.

Sự hiểu biết của tôi ở đây là (hãy biết cụm từ in đậm trong đoạn trên, đã lừa tôi): Trong tác vụ bản đồ, một số tệp có thể bị tràn vào đĩa nhưng chúng được hợp nhất vào một tệp duy nhất. và được sắp xếp. xem xét ví dụ tương tự như trên:

Trước một bản đồ nhiệm vụ duy nhất kết thúc, dữ liệu trung gian của nó có thể là:

mapper-1 nội dung

spill 1:    spill 2:   spill 2: 
    partition-1   partition-1  partition-1 
          hhhh:5  
     xxxx: 2   xxxx: 3    mmmm: 2 
     yyyy: 3   yyyy: 7    yyyy: 9 

    partition-2   partition-2  partition-2 
     aaaa: 15   bbbb: 15   cccc: 15 
     zzzz: 10   zzzz: 15   zzzz: 13 

Sau khi bản đồ nhiệm vụ được hoàn thành, đầu ra từ bản đồ sẽ là một tệp duy nhất (lưu ý ba tệp tràn ở trên được thêm ngay bây giờ nhưng không có bộ kết hợp nào được áp dụng giả định không có bộ kết hợp được chỉ định trong công việc conf):

>Mapper-1 contents: 
partition-1: 
hhhh: 5 
mmmm: 2 
xxxx: 2 
xxxx: 3 
yyyy: 3 
yyyy: 7 
yyyy: 9 
partition-2: 
aaaa: 15 
bbbb: 15 
cccc: 15 
zzzz: 10 
zzzz: 15 
zzzz: 13 

vì vậy ở đây phân vùng-1 có thể tương ứng với giảm-1. Đó là dữ liệu phân đoạn parition-1 tương ứng ở trên được gửi đến reducer-1 và dữ liệu tương ứng với phân đoạn-phân đoạn 2 được gửi đến reducer-2.

Nếu cho đến nay, sự hiểu biết của tôi là đúng,

  1. làm thế nào tôi sẽ có thể nhận được các tập tin trung gian mà có cả các phân vùng và sắp xếp dữ liệu từ đầu ra mapper.
  2. Điều thú vị là chỉ cần chạy trình ánh xạ đang chạy không tạo ra kết quả được sắp xếp mâu thuẫn với các điểm mà dữ liệu gửi đến bộ giảm tốc không được sắp xếp. More details here
  3. Thậm chí không kết hợp được áp dụng nếu Không Mapper chỉ được điều hành: More details here
+0

Câu hỏi tuyệt vời và câu trả lời tuyệt vời! – bigdatamann

Trả lời

8

việc làm Bản đồ chỉ làm việc khác với Map-and-Giảm việc làm. Nó không mâu thuẫn, chỉ khác nhau.

cách tôi có thể lấy tệp trung gian có cả phân vùng và dữ liệu được sắp xếp từ đầu ra của trình ánh xạ.

Bạn không thể. Không có một cái móc để có thể nhận được các mẩu dữ liệu từ các giai đoạn trung gian của MapReduce. Điều này cũng đúng cho nhận dữ liệu sau khi phân vùng, hoặc sau khi một độc giả kỷ lục vv

Thật thú vị khi lưu ý rằng chạy mapper một mình không sản xuất ra được sắp xếp mâu thuẫn với các điểm dữ liệu gửi đến giảm không được sắp xếp. Chi tiết tại đây

Nó không mâu thuẫn. Người lập bản đồ sắp xếp vì trình giảm tốc cần sắp xếp để có thể hợp nhất. Nếu không có bộ giảm tốc, nó không có lý do để sắp xếp, do đó, nó không. Đây là hành vi đúng bởi vì tôi không muốn nó được sắp xếp trong một bản đồ chỉ có công việc mà sẽ làm cho việc xử lý của tôi chậm hơn. Tôi chưa bao giờ có một tình huống mà tôi muốn đầu ra bản đồ của tôi được sắp xếp cục bộ.

Thậm chí không kết hợp được áp dụng nếu Không Mapper chỉ được điều hành: Chi tiết ở đây

phẩm hỗn hợp là một tối ưu hóa. Không có gì đảm bảo rằng chúng thực sự chạy hoặc trên dữ liệu nào.Combiners chủ yếu là có để làm cho các bộ giảm hiệu quả hơn. Vì vậy, một lần nữa, giống như các phân loại địa phương, combiners không chạy nếu không có reducers vì nó không có lý do để.

Nếu bạn muốn hành vi giống như combiner, tôi đề nghị ghi dữ liệu vào bộ đệm (hashmap có lẽ) và sau đó ghi dữ liệu được tổng hợp cục bộ trong chức năng dọn dẹp chạy khi Mapper kết thúc. Hãy cẩn thận khi sử dụng bộ nhớ nếu bạn muốn thực hiện điều này. Đây là một cách tiếp cận tốt hơn bởi vì combiners được quy định như là một tối ưu hóa tốt-to-có và bạn không thể đếm trên chúng chạy ... ngay cả khi chúng chạy.

+0

Cảm ơn các chi tiết. Sự hiểu biết của tôi về cách dữ liệu được phân đoạn và sắp xếp ở phía Map có đúng không? cả ở cấp độ tệp tràn và tệp được hợp nhất. Đó là dữ liệu trung gian giả định tôi đã mô tả ở trên .. –

+0

Có, được phân đoạn và sắp xếp ở phía bên bản đồ. Reducers thực hiện "sắp xếp" cuối cùng bằng cách hợp nhất các tệp phân vùng đã sắp xếp. –

+0

và một điểm nữa: Nếu tôi có hồ sơ cần được sắp xếp một mình, tôi không thể đạt được điều này chỉ với người lập bản đồ. Tôi cần phải chạy một bộ giảm tốc "giả" mà chỉ phun ra dữ liệu đến. –

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