2012-07-26 17 views
70

Trong Hadoop khi nào các nhiệm vụ giảm bắt đầu? Họ có bắt đầu sau khi một tỷ lệ phần trăm (ngưỡng) nhất định của người lập bản đồ hoàn tất không? Nếu vậy, ngưỡng này có được cố định không? Loại ngưỡng nào thường được sử dụng?Khi nào làm giảm các tác vụ bắt đầu trong Hadoop?

Trả lời

181

Pha giảm có 3 bước: trộn, sắp xếp, giảm. Trộn là nơi dữ liệu được thu thập bởi bộ giảm tốc từ mỗi người lập bản đồ. Điều này có thể xảy ra trong khi những người vẽ bản đồ đang tạo dữ liệu vì nó chỉ là một chuyển dữ liệu. Mặt khác, sắp xếp và giảm chỉ có thể bắt đầu khi tất cả các người lập bản đồ được thực hiện. Bạn có thể biết MapReduce nào đang thực hiện bằng cách xem xét tỷ lệ phần trăm hoàn thành bộ giảm tốc: 0-33% có nghĩa là việc trộn ngẫu nhiên, 34-66% sắp xếp, giảm 67% -100%. Đây là lý do tại sao bộ giảm tốc của bạn đôi khi có vẻ "bị mắc kẹt" ở mức 33% - nó đang chờ người lập bản đồ kết thúc.

Trình giảm tốc bắt đầu xáo trộn dựa trên ngưỡng tỷ lệ phần trăm người lập bản đồ đã hoàn tất. Bạn có thể thay đổi tham số để có bộ giảm tốc bắt đầu sớm hay muộn.

Tại sao bắt đầu giảm tốc sớm một điều tốt? Bởi vì nó lây lan ra truyền dữ liệu từ những người vẽ bản đồ đến bộ giảm tốc theo thời gian, đó là một điều tốt nếu mạng của bạn là nút cổ chai.

Tại sao bắt đầu giảm tốc sớm một điều xấu? Bởi vì họ "hog lên" làm giảm các khe trong khi chỉ sao chép dữ liệu và chờ người lập bản đồ kết thúc. Một công việc khác bắt đầu sau đó sẽ thực sự sử dụng các khe giảm hiện nay không thể sử dụng chúng.

Bạn có thể tùy chỉnh khi bộ giảm tốc khởi động bằng cách thay đổi giá trị mặc định là mapred.reduce.slowstart.completed.maps trong mapred-site.xml. Giá trị 1.00 sẽ chờ cho tất cả các người lập bản đồ hoàn tất trước khi bắt đầu bộ giảm tốc. Giá trị 0.0 sẽ bắt đầu giảm tốc ngay lập tức. Giá trị 0.5 sẽ bắt đầu giảm khi một nửa số người lập bản đồ hoàn tất. Bạn cũng có thể thay đổi mapred.reduce.slowstart.completed.maps trên cơ sở từng công việc. Trong phiên bản mới của Hadoop (ít nhất 2.4.1) tham số được gọi là mapreduce.job.reduce.slowstart.completedmaps (cảm ơn người dùng yegor256).

Thông thường, tôi muốn giữ mapred.reduce.slowstart.completed.maps ở trên 0.9 nếu hệ thống có nhiều công việc cùng một lúc. Bằng cách này, công việc không tăng tốc khi họ không làm gì ngoài việc sao chép dữ liệu. Nếu bạn chỉ có một công việc chạy cùng một lúc, hãy thực hiện 0.1 có thể sẽ phù hợp.

+3

bạn có biết nơi tôi có thể đọc thêm về những gì bạn đã đề cập không? – daydreamer

+1

Slowstart là khá kém tài liệu trong quan điểm của tôi .... như là hầu hết các tham số cấu hình tối nghĩa. –

+5

Câu trả lời hay @Donald Miner. Chỉ muốn thêm vào phiên bản Hadoop mới hơn (tôi đang sử dụng 1.1.2), giá trị được mặc định là 0.05. http://hadoop.apache.org/docs/r1.1.2/mapred-default.html – sufinawaz

1

Tôi hiểu rõ Phần bắt đầu giảm pha với giai đoạn bản đồ và tiếp tục tiêu thụ bản ghi từ bản đồ. Tuy nhiên kể từ khi có phân loại và pha trộn sau giai đoạn bản đồ, tất cả các đầu ra phải được sắp xếp và gửi đến bộ giảm tốc. Vì vậy, một cách hợp lý, bạn có thể tưởng tượng rằng pha giảm bắt đầu chỉ sau giai đoạn bản đồ nhưng thực sự cho các bộ giảm tốc hiệu suất cũng được khởi tạo với những người lập bản đồ.

0

Phần trăm hiển thị cho pha giảm thực sự là về lượng dữ liệu được sao chép từ đầu ra bản đồ đến các thư mục đầu vào bộ giảm. Để biết khi nào việc sao chép này bắt đầu? Đây là một cấu hình bạn có thể thiết lập như Donald đã trình bày ở trên. Khi tất cả dữ liệu được sao chép sang bộ giảm (nghĩa là giảm 100%), đó là khi bộ giảm tốc bắt đầu hoạt động và do đó có thể đóng băng trong "giảm 100%" nếu mã giảm của bạn là I/O hoặc CPU chuyên sâu.

3

Giai đoạn giảm có thể bắt đầu lâu trước khi trình giảm tốc được gọi. Ngay sau khi "a" bản đồ kết thúc công việc, dữ liệu được tạo ra trải qua một số sắp xếp và xáo trộn (bao gồm cả cuộc gọi đến bộ kết hợp và phân vùng). Các "giai đoạn" giảm tốc đá trong thời điểm xử lý dữ liệu bản đồ bài đăng được bắt đầu. Khi quá trình xử lý được thực hiện, bạn sẽ thấy tiến trình giảm tỷ lệ phần trăm. Tuy nhiên, không có bộ giảm tốc nào được gọi. Tùy thuộc vào số lượng bộ xử lý có sẵn/được sử dụng, bản chất của dữ liệu và số lượng bộ giảm tốc mong muốn, bạn có thể muốn thay đổi tham số như được mô tả bởi @ Donald-miner ở trên.

0

Hãy xem xét một ví dụ WordCount để hiểu rõ hơn cách bản đồ giảm tác vụ hoạt động. Giả sử chúng tôi có một tệp lớn, nói một cuốn tiểu thuyết và nhiệm vụ của chúng tôi là tìm số lần mỗi từ xuất hiện trong tệp. Kể từ khi tập tin là lớn, nó có thể được chia thành các khối khác nhau và nhân rộng trong các nút công nhân khác nhau. Công việc đếm từ bao gồm các nhiệm vụ bản đồ và giảm. Nhiệm vụ bản đồ lấy làm đầu vào cho mỗi khối và tạo cặp khóa-giá trị trung gian. Trong ví dụ này, vì chúng tôi đếm số lần xuất hiện của từ, trình ánh xạ trong khi xử lý một khối sẽ dẫn đến kết quả trung gian của biểu mẫu (word1, count1), (word2, count2) v.v ... Các kết quả trung gian của tất cả các nhà lập bản đồ là thông qua một pha trộn sẽ sắp xếp lại kết quả trung gian.

Giả sử rằng đầu ra bản đồ của chúng tôi từ người vẽ bản đồ khác nhau có dạng sau:

Bản đồ 1: - (nghĩa là, 24) (đã, 32) (và, 12)

Map2: - (của tôi, 12) (nghĩa là, 23) (đã, 30)

Bản đồ kết quả đầu ra đều được sắp xếp một cách như vậy mà giá trị khóa tương tự được trao cho các giảm tương tự. Ở đây nó sẽ có nghĩa là các phím tương ứng với, là vv đi cùng một reducer.It là giảm mà sản xuất cuối cùng đầu ra, mà trong trường hợp này sẽ là: - (và, 12) (là, 47) (của tôi, 12) (đã, 62)

0

Tác vụ giảm tốc chỉ bắt đầu sau completion của tất cả các người lập bản đồ.

Nhưng việc truyền dữ liệu xảy ra sau each Bản đồ. Thực ra nó là một hoạt động kéo.

Điều đó có nghĩa, mỗi lần giảm sẽ hỏi mỗi bản đồ nếu họ có một số dữ liệu để lấy lại từ Map.If họ tìm thấy bất kỳ người lập bản đồ nào đã hoàn thành nhiệm vụ của họ, Reducer kéo dữ liệu trung gian.

Dữ liệu trung gian từ Mapper được lưu trữ trong disk. Và việc chuyển dữ liệu từ Mapper để Giảm xảy ra thông qua Mạng (Data Locality không được bảo quản trong Giảm pha)

0

Giảm bắt đầu chỉ sau khi tất cả các mapper đã đánh bắt có nhiệm vụ, giảm phải liên lạc với tất cả các người vẽ bản đồ nên nó phải đợi cho đến khi người lập bản đồ cuối cùng hoàn thành nhiệm vụ task.however của nó bắt đầu truyền dữ liệu đến thời điểm nó đã hoàn thành nhiệm vụ của mình.

1

Khi Mapper hoàn thành nhiệm vụ của mình thì Reducer bắt đầu công việc của mình để Giảm dữ liệu, đây là công việc Mapreduce.

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