2013-02-06 15 views
18

Tôi muốn biết tại sao bộ so sánh nhóm được sử dụng trong loại thứ hai của mapreduce.Việc sử dụng bộ so sánh nhóm trong bản đồ hadoop là gì?

Theo hướng dẫn dụ dứt khoát của trung học sắp xếp

Chúng tôi muốn thứ tự sắp xếp cho các phím để được theo năm (tăng dần) và sau đó bởi nhiệt độ (giảm dần):

1900 35°C 
1900 34°C 
1900 34°C 
... 
1901 36°C 
1901 35°C 

Bằng cách đặt phân vùng để phân vùng bởi phần năm của khóa, chúng tôi có thể đảm bảo rằng hồ sơ cho cùng năm đó đi cùng một bộ giảm tốc. Tuy nhiên, điều này vẫn chưa đủ để đạt được mục tiêu của chúng tôi. Trình phân vùng chỉ đảm bảo rằng một bộ giảm tốc nhận được tất cả các bản ghi cho một năm; nó không thay đổi thực tế là bộ giảm tốc nhóm theo khóa trong phân vùng.

Vì chúng tôi đã viết trình phân vùng riêng của chúng tôi để quản lý các khóa đầu ra của bản đồ sẽ giảm thiểu cụ thể, vậy tại sao chúng ta nên nhóm nó lại.

Cảm ơn trước

Trả lời

30

Để hỗ trợ các câu trả lời được lựa chọn tôi thêm:

Tiếp theo từ this explanation

Input:

symbol time price 
a  1 10 
a  2 20 
b  3 30 

Bản đồ đầu ra: tạo hỗn chìa khóa \ giá trị như vậy:

biểu tượng thời gian thời gian giá

một-1                   1-10

một-2                   2-20

b-3                   3-30

Các phân vùng: ý chí tuyến một-1 và một-2 chìa khóa là sản phẩm giảm tương tự mặc dù các phím là khác nhau . Nó cũng sẽ định tuyến b-3 đến một bộ giảm tốc riêng biệt.

GroupComparator: một khi composit chìa khóa \ giá trị đến là sản phẩm giảm thay vì giảm nhận

(một-1, {1-10})

(a- 2, {2-20})

ở trên sẽ xảy ra d ue cho các giá trị khóa duy nhất theo thành phần.

sánh nhóm sẽ đảm bảo giảm được:

(một, {1-10,2-20}) phương pháp

[[Trong một đơn giảm gọi.]]

+0

giải thích tốt đẹp. –

2

Bạn cần giới thiệu khóa trung gian là tổng hợp của năm và nhiệt độ; phân vùng trên khóa tự nhiên (năm) và giới thiệu một bộ so sánh sẽ sắp xếp trên toàn bộ khóa tổng hợp. Bạn đang phải bằng cách phân vùng vào năm bạn sẽ nhận được tất cả dữ liệu trong một năm trong cùng một bộ giảm tốc, do đó, bộ so sánh sẽ phân loại dữ liệu hiệu quả cho từng năm theo nhiệt độ.

22

Hãy để tôi cải thiện tuyên bố "... chăm sóc các khóa đầu ra bản đồ sẽ giảm tốc cụ thể".

Phương pháp giảm tốc và phương pháp giảm: Một JVM được tạo cho mỗi tác vụ Giảm và mỗi một trong số này có một cá thể của lớp Reducer. Đây là trường hợp Reducer (tôi gọi nó là Reducer từ bây giờ). được gọi nhiều lần tùy thuộc vào 'nhóm chính'. Mỗi lần giảm được gọi, 'valuein' có danh sách các giá trị đầu ra bản đồ được nhóm theo khóa bạn xác định trong 'nhóm so sánh'. Mặc định, trình so sánh nhóm sử dụng toàn bộ khóa đầu ra bản đồ .

Trong ví dụ, khóa đầu ra bản đồ được đổi thành 'năm và nhiệt độ' để đạt được sắp xếp.Không cần bạn xác định bộ so sánh nhóm chỉ sử dụng phần 'năm' của khóa đầu ra bản đồ, bạn không thể tạo tất cả bản ghi của cùng một năm đi đến cùng một cuộc gọi phương thức giảm.

+0

bạn có thể giải thích câu trả lời của bạn với một kịch bản trong tay, lấy một ví dụ đơn giản như các số từ. những gì tôi đang tìm kiếm là mức độ hệ thống hoạt động của toàn bộ công việc. Cũng có một nghi ngờ: Chúng tôi có thể nhóm các khóa được truyền cho một bộ giảm tốc trên một số tham số hay không, ví dụ: nhiệt độ của tất cả các ngày chủ nhật từ dữ liệu được chuyển đến bộ giảm tốc cho năm 2013 –

1

Trình phân hoạch mặc định tính toán giá trị băm của khóa và các khóa có giá trị băm giống nhau sẽ được gửi đến cùng một bộ giảm tốc.Nếu bạn có phím tổng hợp (tự nhiên + tăng thêm) được phát ra trong trình ánh xạ của bạn và nếu bạn muốn gửi các khóa có cùng khóa tự nhiên cho cùng một trình giảm tốc thì bạn phải triển khai trình phân hoạch tùy chỉnh.

public class SimplePartitioner implements Partitioner { 
@Override 
public int getPartition(Text compositeKey, LongWritable value, int numReduceTasks) { 
    //Split the key into natural and augment 
    String naturalKey = compositeKey.toString().split("separator") 


    return naturalKey.hashCode(); 
} 

}

Và bây giờ nếu bạn muốn tất cả hàng có liên quan của bạn trong vòng một phân vùng dữ liệu được gửi đến một giảm đơn bạn cũng phải thực hiện một so sánh nhóm mà chỉ xem xét tự nhiên quan trọng

public class SimpleGroupingComparator extends WritableComparator { 

@Override 
public int compare(Text compositeKey1, Text compositeKey2) { 


return compare(compositeKey1.getNaturalKey(),compositeKey2.getNaturalKey()); 
} 

}

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