博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hadoop程序MapReduce之MaxTemperature
阅读量:6693 次
发布时间:2019-06-25

本文共 2873 字,大约阅读时间需要 9 分钟。

需求:求每年当中最高的温度

样本:temp.log 

        2016080623

        2016072330

        2015030420

输出结果:2016 30

              2015 20

MapReduce分析设计:

Mapper分析设计:

1、将文件分割成键值队<k1,v1>,k1代表:行位置,v1代表:一行数据。

2、将这行数据进行分割成<k2,v2>,k2代表:年份,v1代表:温度。

Reduce分析设计:

3、将一些列合并后的相同key的一系列温度<k3,v3>,k3代表:年份,v1代表:list<int>多个温度。

4、统计比较最大温度<k4,v4>,k4代表:年份,v4代表:最大的温度。

 

程序部分:

TempMapper类:

package com.cn.temperature;import java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;public class TempMapper extends Mapper
{ public void map(Object key, Text value, Context context) throws IOException, InterruptedException { String lineValue = value.toString(); String year = lineValue.substring(0, 4); int temperature = Integer.parseInt(lineValue.substring(8)); context.write(new Text(year), new IntWritable(temperature)); }}

 

TempReduce部分:

package com.cn.temperature;import java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;public class TempReduce extends Reducer
{ public void reduce(Text key, Iterable
values, Context context) throws IOException, InterruptedException { int maxTemp = Integer.MIN_VALUE; for(IntWritable value : values){ maxTemp = Math.max(maxTemp, value.get()); } context.write(key, new IntWritable(maxTemp)); }}

 

MaxTemperature部分:

package com.cn.temperature;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.util.GenericOptionsParser;public class MaxTemperature {    public static void main(String[] args) throws Exception {        Configuration conf = new Configuration();        String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();        if (otherArgs.length != 2) {           System.err.println("Usage: wordcount  ");           System.exit(2);        }        Job job = new Job(conf, "max tempperature");                //运行的jar        job.setJarByClass(MaxTemperature.class);                //job执行作业时输入和输出文件的路径        FileInputFormat.addInputPath(job, new Path(otherArgs[0]));        FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));          //指定自定义的Mapper和Reducer作为两个阶段的任务处理类        job.setMapperClass(TempMapper.class);        job.setReducerClass(TempReduce.class);                  //设置最后输出结果的Key和Value的类型        job.setOutputKeyClass(Text.class);        job.setOutputValueClass(IntWritable.class);                //提交作业并等待它完成        System.exit(job.waitForCompletion(true) ? 0 : 1);    }}

 

记录自己成长的过程。我觉得这点很重要。

 

转载地址:http://gocoo.baihongyu.com/

你可能感兴趣的文章
hadoop命令执行hbase应用jar包时的环境变量加载问题
查看>>
awk常用注意事项--awk如何引用外部变量
查看>>
XenMobile学习文章总结
查看>>
Android开发者的混淆使用手册
查看>>
Telnet服务及协议
查看>>
SpringMVC深度探险
查看>>
关于vs2010巨慢(cpu占用高)的几种解决方式
查看>>
简单3步,轻松集成Testlink和MantisBT
查看>>
SQL语句教程(04) AND OR
查看>>
EBS 12.1.3 db 11.2.3 dg AND DG SWITCH OVER
查看>>
Oracle中的JOIN
查看>>
html中iframe控制父页面刷新
查看>>
每天一个linux命令(50):crontab命令
查看>>
linux命令7--cat命令&nl命令
查看>>
.NET底层开发技术
查看>>
RHEL regiester
查看>>
c/c++中的一些基础知识
查看>>
练习:输出整数每一位,计算算数,9出现次数,输出图案,水仙花数
查看>>
操作系统的发展
查看>>
HEVC码流简单分析
查看>>