需求:根据归属地输出流量统计数据结果到不同文件,以便于在查询统计结果时可以定位到 省级范围进行
思路:MapReduce 中会将 map 输出的 kv 对,按照相同 key 分组,然后分发给不同的 reducetask 默认的分发规则为:根据 key 的 hashcode%reducetask 数来分发,所以:如果要按照我们自 己的需求进行分组,则需要改写数据分发(分组)组件 Partitioner 自定义一个 CustomPartitioner 继承抽象类:Partitioner 然后在 job 对象中,设置自定义 partitioner: job.setPartitionerClass(ProvincePartitioner.class)
下面是 MapReduce 程序实现 首先看 Partitioner:
再看 MapReduce 程序 FlowSumProvince: