patition類結構apache
2. HashPartitioner是mapreduce的默認partitioner。計算方法是緩存
which reducer=(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks,獲得當前的目的reducer。app
3. BinaryPatitioner繼承於Partitioner< BinaryComparable ,V>,是Partitioner的偏特化子類。該類提供leftOffset和rightOffset,在計算which reducer時僅對鍵值K的[rightOffset,leftOffset]這個區間取hash。dom
Which reducer=(hash & Integer.MAX_VALUE) % numReduceTasks分佈式
4. KeyFieldBasedPartitioner也是基於hash的個partitioner。和BinaryPatitioner不一樣,它提供了多個區間用於計算hash。當區間數爲0時KeyFieldBasedPartitioner退化成HashPartitioner。oop
$HADOOP_HOME/bin/hadoop streaming \url
-D stream.map.output.field.separator=. \spa
-D stream.num.map.output.key.fields=4 \對象
-D map.output.key.field.separator=. \ #map輸出分隔符設爲「.」blog
-D num.key.fields.for.partition=2 \ #將key分隔出來的前兩個部分而不是整個key用於Partitioner作partition
-input /user/test/input -output /user/test/output \
-mapper 「mymapper.sh」 -reducer 「 myreducer.sh」 \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \ #使用KeyFieldBasedPartitioner
-file /home/work/mymapper.sh \
-file /home/work/myreducer.sh \
-jobconf mapred.job.name=」key-partition-demo」
5. TotalOrderPartitioner這個類能夠實現輸出的全排序。不一樣於以上3個partitioner,這個類並非基於hash的。在下一節裏詳細的介紹totalorderpartitioner。
採樣類結構圖
採樣方式對比表:
類名稱 |
採樣方式 |
構造方法 |
效率 |
特色 |
SplitSampler<K,V> |
對前n個記錄進行採樣 |
採樣總數,劃分數 |
最高 |
|
RandomSampler<K,V> |
遍歷全部數據,隨機採樣 |
採樣頻率,採樣總數,劃分數 |
最低 |
|
IntervalSampler<K,V> |
固定間隔採樣 |
採樣頻率,劃分數 |
中 |
對有序的數據十分適用 |