import java.io.File; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class GetMinMaxKeyMapReduce { public static class GetMinMaxKeyMap extends Mapper<Object, Text, Text,Text> { private Text min = new Text(); private Text max = new Text(); private Long i = new Long(0); public void map(Object key, Text value, Context context) throws IOException, InterruptedException { String[] strs = value.toString().split("\t"); if (strs!=null && strs.length>5 &&strs[3].length() > 20 && strs[3].indexOf(" ") == -1 && strs[3].indexOf("=") == -1) { if(i==0){ min= new Text(strs[3]); max= new Text(strs[3]); } if(strs[3].compareTo(min.toString())<0){ min=new Text(strs[3]); } if(strs[3].compareTo(max.toString())>0){ max=new Text(strs[3]); } i++; } } @Override protected void cleanup(Context context) throws IOException, InterruptedException { context.write(new Text("min"), min); context.write(new Text("max"), max); } } public static class GetMinMaxKeyReducer extends Reducer<Text, Text, Text, Text> { public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException { String result =""; for (Text value : values) { if(result.equals("")){ result = value.toString(); } if (("min").equals(key.toString())) { if(value.toString().compareTo(result)<0){ result=value.toString(); } } else if (("max").equals(key.toString())) { if(value.toString().compareTo(result)>0){ result=value.toString(); } } else { System.err.println("未知reduce 输入key:" + key.toString()); } } context.write(key, new Text(result)); } } public static void main(String[] args) throws Exception { File jarFile = EJob.createTempJar("bin"); ClassLoader classLoader = EJob.getClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); //Hadoop 运行环境 Configuration conf = new Configuration(); conf.set("mapred.job.tracker", "bfdbjc1:12001");; //任务参数设置 Job job = new Job(conf, "GetMinMaxKey"); job.setJarByClass(GetMinMaxKeyMapReduce.class); job.setMapperClass(GetMinMaxKeyMap.class); job.setReducerClass(GetMinMaxKeyReducer.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); FileInputFormat.addInputPath(job, new Path("hdfs://bfdbjc1:12000/user/work/tables2/raw_kafka/l_date=2013-09-15")); FileOutputFormat.setOutputPath(job, new Path("hdfs://bfdbjc1:12000/user/work/output/minmaxkey/")); //Eclipse 本地提交 ((JobConf) job.getConfiguration()).setJar(jarFile.toString()); //等待任务运行完成 System.exit(job.waitForCompletion(true) ? 0 : 1); } }
相关推荐
本教程将详细讲解如何使用Java编程语言操作Hadoop的MapReduce来计算整数序列中的最大值和最小值,这对于数据分析和处理任务来说是非常基础且实用的技能。 首先,我们需要理解MapReduce的工作原理。MapReduce是一种...
标题"mapreduce求最大值和最小值"指的是使用MapReduce框架来找出输入数据集中的最大和最小值。这是一个典型的问题,可以很好地展示MapReduce的工作原理和它的应用。 **Map阶段**: 在Map阶段,输入数据被分割成多个...
在本实验"MapReduce编程训练(三)"中,我们主要关注的是利用Hadoop MapReduce框架处理大数据,特别是针对全球气温记录的统计分析。实验的主要目标是实现以下几个关键知识点: 1. **自定义数据类型(Custom Data ...
1. **数据预处理**:在实际操作前,可能需要对原始气象数据进行预处理,确保它们符合MapReduce的输入格式,例如,将CSV或TXT文件的数据转换为键值对形式,键可以是年份,值包含当年的所有温度记录。 2. **编写...
利用MapReduce实现了求学生成绩的最大值,最小值,及成绩分布。结合我的博客“MapReduce之学生平均成绩”看,效果更好。
(2)MapReduce输出结果包含年份、最高气温、最低气温,并按最高气温降序排序。如果最高气温相同,则按最低气温升序排序。 (3)使用自定义数据类型。 (4)结合Combiner和自定义数据类型完成全球每年最高气温和最低气温的...
6. 数值总结(Numerical Summarizations):涉及如何在MapReduce中进行数值数据的处理,以及如何编写Map函数和Reduce函数来计算数据集的统计特征,如平均值、中位数、最大值和最小值等。 7. 倒排索引总结(Inverted...
MapReduce 设计模式的应用包括单词计数、记录计数、最大值/最小值/计数、平均值/中位数/标准差等。 倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表...
3. **编写Reducer**:Reducer在Reduce阶段运行,它接收Mapper生成的中间键值对,对每个键的所有值进行聚合操作,如求和、最大值、最小值等。在词频统计中,Reducer会计算每个单词的总数。 4. **Shuffle和Sort**:在...
- **数值概要**:在MapReduce中,可以计算各种统计摘要,如最大值、最小值、计数、平均值、中位数和标准差。这些摘要可以帮助理解数据的分布和特性。例如,最大值和最小值可以提供范围信息,平均值反映数据的中心...
在这个项目中,目标是计算鸢尾花数据集中四个特征的统计信息:最大值、最小值和平均值。这涉及到了数据的聚合操作,非常适合MapReduce处理。Map阶段可能涉及读取每个样本的特征值,然后生成键为特征名(如“萼片长度...
该文件是用于MapReduce分析年气象数据用源代码打成的jar包,虽然名字为MaxTemperature,但里面也包含了MinTemperature的程序。所以可以求取每年的最大值和最小值。
数值汇总模式允许我们对数据进行数学统计,如求平均值、总和、最大最小值等。倒排索引汇总则常见于搜索引擎的处理,它将文本数据转换成便于检索的倒排索引。计数器(Counting with Counters)模式是另一种总结模式,...
2. 汇总操作:对每个键的所有值执行聚合操作,如求和、平均值、最大值或最小值,这取决于具体分析的目标。 3. 结果写回:将最终结果写回到HDFS,供后续分析或展示使用。 这个项目作为“课程作业编程”,意味着它是...
Reduce阶段则负责聚合Map阶段的结果,执行必要的聚合操作,如求和、最大值、最小值等,最终生成输出结果。 MapReduce的核心优势在于其容错性和可扩展性。如果某个节点故障,任务可以被重新调度到其他节点执行,保证...
列式统计可能涉及计算文件中特定列的值,如总和、平均值或最大最小值。在mrflowcount工程中,假设我们有一个结构化的数据文件,每一行代表一条记录,每列包含不同类型的数据。MapReduce的处理方式如下: 1. **...
Reduce函数是数据聚合的地方,用于计算最终结果,例如求和、最大值、最小值或者统计等。 MapReduce库负责处理数据的分割、分布式调度、错误处理和节点间的通信。这使得程序员可以专注于业务逻辑,而不必关心底层的...
在这个实例中,Map函数可能解析Hbase中的每一条记录,提取关键信息,如数据字段,而Reduce函数则进行数据统计,例如计算总数、平均值或最大最小值等。 处理后的数据需要存储到**MySQL** 数据库中。MySQL是一个关系...