Mapreduce---RandomSampler采样实现全排序
来源:互联网 发布:旋转门编程器plc 编辑:程序博客网 时间:2024/06/14 21:12
排序是MapReduce的核心技术,排序分为部分排序,全排序和二次排序。
部分排序:调用默认的HashPartitioner,不需要操作,每个reduce聚合的key都是有序的。
全排序:对reduce输出的所有的key实现排序
方法1:设置一个reducde
方法2:自定义分区类实现全排序
方法3 :使用采样
下面以统计每年的最高气温为例进行示例:
注意:源文件是一个sequenceFile序列文件<IntWritable, IntWritable>
1、MaxTempMapper
package hadoop.mr.sort.total.totalorder;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/** * MaxTempMapper */public class MaxTempMapper extends Mapper<IntWritable, IntWritable, IntWritable, IntWritable> {protected void map(IntWritable key, IntWritable value, Context context) throws IOException, InterruptedException {context.write(key,value);}}2、MaxTempReducer
package hadoop.mr.sort.total.totalorder;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;/** */public class MaxTempReducer extends Reducer<IntWritable, IntWritable, IntWritable, IntWritable>{protected void reduce(IntWritable key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int max = Integer.MIN_VALUE ;for(IntWritable iw : values){max = max > iw.get() ? max : iw.get() ;}context.write(key,new IntWritable(max));}}
3、App
package hadoop.mr.sort.total.totalorder;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.mapreduce.lib.partition.InputSampler;import org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner;/** */public class App {public static void main(String[] args) throws Exception {args = new String[]{"d:/java/mr/data/temp.seq", "d:/java/mr/out"};Configuration conf = new Configuration();FileSystem fs = FileSystem.get(conf);if(fs.exists(new Path(args[1]))){fs.delete(new Path(args[1]),true);}Job job = Job.getInstance(conf);job.setJobName("maxTemp");job.setJarByClass(App.class);job.setMapperClass(MaxTempMapper.class);job.setReducerClass(MaxTempReducer.class);FileInputFormat.addInputPath(job,new Path(args[0]));FileOutputFormat.setOutputPath(job,new Path(args[1]));//设置combine输入格式job.setInputFormatClass(SequenceFileInputFormat.class);job.setPartitionerClass(TotalOrderPartitioner.class);job.setNumReduceTasks(3);job.setMapOutputKeyClass(IntWritable.class);job.setMapOutputValueClass(IntWritable.class);job.setOutputKeyClass(IntWritable.class);job.setOutputValueClass(IntWritable.class);TotalOrderPartitioner.setPartitionFile(job.getConfiguration(),new Path("file:///d:/java/mr/par.seq"));//随机采样器InputSampler.RandomSampler<IntWritable,IntWritable> r = new InputSampler.RandomSampler<IntWritable, IntWritable>(1f,5,3);//创建分区文件InputSampler.writePartitionFile(job,r);job.waitForCompletion(true);}}
阅读全文
0 0
- Mapreduce---RandomSampler采样实现全排序
- 利用采样器实现mapreduce任务输出全排序
- 利用采样器实现mapreduce任务输出全排序
- 利用采样器实现mapreduce任务输出全排序
- MapReduce实现倒排索引全排序
- MapReduce---自定义分区类实现全排序
- MapReduce 全排序
- MapReduce的全排序
- MapReduce --全排序
- Hadoop全排序中的Sampler采样器
- Mapreduce实例-sort全排序
- mapreduce的全排序问题
- mapreduce实现全局排序
- mapreduce程序实现排序
- MapReduce实现排序功能
- MapReduce实现分组排序
- MapReduce 全排列算法实现
- mapreduce排序和二次排序以及全排序
- Scala学习笔记:Scala语法基础
- 增量式PID的matlab仿真
- Android之jni编译出现error: jump to label ‘XXXX’ [-fpermissive]解决办法
- Xmemcached学习笔记二(简单使用)
- 算法(二):快速排序的两种实现方法
- Mapreduce---RandomSampler采样实现全排序
- HBase 常用Shell命令
- 训练日记8.18
- C语言实现字符串拷贝函数的几种方法
- python基础学习-正则表达式
- 深入剖析jsonp跨域原理
- 8-18 DAIRY
- 微信小程序获取openid中的问题
- 【贪心】贪心算法总结