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,
- 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.
- Đ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
- 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
Câu hỏi tuyệt vời và câu trả lời tuyệt vời! – bigdatamann