2013-08-27 33 views
6

Phân vùng là quá trình xác định thể hiện giảm tốc nào sẽ nhận được khóa và giá trị trung gian nào. Mỗi người lập bản đồ phải xác định tất cả các cặp đầu ra (khóa, giá trị) của nó mà bộ giảm tốc sẽ nhận chúng. Điều cần thiết là đối với bất kỳ khóa nào, bất kể trường hợp bản đồ nào tạo ra nó, phân vùng đích là giống nhau Vấn đề: Hadoop làm như thế nào? Sử dụng hàm băm? chức năng mặc định là gì?Phân vùng! làm thế nào để hadoop làm cho nó? Sử dụng hàm băm? chức năng mặc định là gì?

Trả lời

16

Trình phân vùng mặc định trong Hadoop là HashPartitioner có phương thức được gọi là getPartition. Phải mất key.hashCode() & Integer.MAX_VALUE và tìm mô đun bằng cách sử dụng số lượng tác vụ giảm.

Ví dụ: nếu có 10 tác vụ giảm, getPartition sẽ trả về giá trị 0 đến 9 cho tất cả các khóa.

Đây là mã:

public class HashPartitioner<K, V> extends Partitioner<K, V> { 
    public int getPartition(K key, V value, int numReduceTasks) { 
     return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; 
    } 
} 

Để tạo một phân vùng tùy chỉnh, bạn sẽ mở rộng Partitioner, tạo ra một phương pháp getPartition, sau đó thiết lập phân vùng của bạn trong mã trình điều khiển (job.setPartitionerClass(CustomPartitioner.class);). Điều này đặc biệt hữu ích nếu thực hiện các phép toán sắp xếp thứ cấp, ví dụ.

+1

tải xuống! cảm ơn bạn! –

+0

@tommy_o Phương thức getPartition (..) được gọi là gì? Cái gì gọi phương thức này? nơi để gọi phương pháp này? –

+0

@BurakKarasoy khi bạn tạo đối tượng Công việc để định cấu hình các thuộc tính công việc của MR, nó sẽ cung cấp cho bạn một phương thức để khai báo CustomPartitioner nếu có theo quy định của tác giả ở trên. Trình phân hoạch tùy chỉnh này được gọi nội bộ vào khung MR sau khi tác vụ Bản đồ đã hoàn thành và dữ liệu đang bị tràn vào đĩa –

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