hadoop程序MapReduce之MaxTemperature

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

样本: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<Object, Text, Text, IntWritable>{
    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<Text, IntWritable, Text, IntWritable>{
    public void reduce(Text key, Iterable<IntWritable> 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);
    }
}

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

时间: 2024-10-14 18:44:42

hadoop程序MapReduce之MaxTemperature的相关文章

hadoop程序MapReduce之DataSort

需求:对文件中的数据进行排序. 样本:sort.log 10 13 10 20 输出:1 10 2 10 3 13 4 20 分析部分: mapper分析: 1.<k1,v1>k1代表:行位置编号,v1代表:一行数据 2.<k2,v2>k2代表:一行数据,v2代表:此处为1. reduce分析: 3.<k3,v3>k3代表:相同的key,v3代表:list<int> 4.合并输出:<k4,v4>k4代表:递增编号,v4代表:key值. 程序部分:

hadoop程序MapReduce之DataDeduplication

需求:去掉文件中重复的数据. 样板:data.log 2016-3-1 a 2016-3-2 b 2016-3-2 c         2016-3-2 b 输出结果: 2016-3-1 a 2016-3-2 b 2016-3-2 c 解决思路:取出一行数据,经过mapper处理后,利用MapReduce默认的将相同的key合并后交给reduce处理的原则,这样可以达到数据去重解决问题. MapReduce分析设计: Mapper分析设计: 1.<k1,v1>,k1代表:每行数据的行号,v1代

hadoop程序MapReduce之WordCount

需求:统计一个文件中所有单词出现的个数. 样板:word.log文件中有hadoop hive hbase hadoop hive 输出:hadoop 2 hive 2 hbase 1 MapReduce设计方式: 一.Map过程<k,v>键值队的设计: 1.按行将文本文件切割成 <k1,v1>,k1代表:行在文件中的位置,v1代表:一行数据.多少个<k1,v1>就调用多少次map()方法. 2.在map()方法中将一行数据按照空格继续分割成<k2,v2>,

hadoop程序MapReduce之average

需求:求多门课程的平均值. 样板:math.txt zhangsan 90 lisi 88 wanghua 80 china.txt zhangsan 80lisi 90wanghua 88 输出:zhangsan 85 lisi 89 wanghua 84 分析部分: mapper部分分析: 1.<k1,v1>k1代表:一行数据的编号位置,v1代表:一行数据. 2.<k2,v2>k2代表:名字,v2代表:分数. reduce部分分析: 3.<k3,v3>k3代表:相同

hadoop程序MapReduce之SingletonTableJoin

需求:单表关联问题.从文件中孩子和父母的关系挖掘出孙子和爷奶关系 样板:child-parent.txt xiaoming daxiong daxiong alice daxiong jack 输出:xiaoming alice xiaoming jack 分析设计: mapper部分设计: 1.<k1,k1>k1代表:一行数据的编号位置,v1代表:一行数据. 2.左表:<k2,v2>k2代表:parent名字,v2代表:(1,child名字),此处1:代表左表标志. 3.右表:&

Hadoop之MapReduce程序应用三

摘要:MapReduce程序进行数据去重. 关键词:MapReduce   数据去重 数据源:人工构造日志数据集log-file1.txt和log-file2.txt. log-file1.txt内容 2014-1-1    wangluqing 2014-1-2    root 2014-1-3   root 2014-1-4  wangluqing 2014-1-5  root 2014-1-6  wangluqing log-file2.txt内容 2014-1-1  root 2014-

用PHP编写Hadoop的MapReduce程序

用PHP写hadoop的mapreduce程序 Hadoop本身是Java写的,所以,给hadoop写mapreduce,人们会自然地想到java 但hadoop里面有个contrib叫做hadoop streaming,这是一个小工具,为hadoop提供streaming支持,使得任何支持标准IO (stdin, stdout)的可执行程序都能成为hadoop的mapper 或者 reducer 例如:hadoop jar hadoop-streaming.jar -input SOME_IN

Hadoop之MapReduce程序分析

摘要:Hadoop之MapReduce程序包括三个部分:Mapper,Reducer和作业执行.本文介绍和分析MapReduce程序三部分结构. 关键词:MapReduce   Mapper  Reducer   作业执行 MapReduce程序包括三个部分,分别是Mapper,Reducer和作业执行. Mapper 一个类要充当Mapper需要继承MapReduceBase并实现Mapper接口. Mapper接口负责数据处理阶段.它采用形式为Mapper<K1,V1,K2,V2>的Jav

Hadoop之MapReduce程序应用一

摘要:MapReduce程序处理专利数据集. 关键词:MapReduce程序   专利数据集 数据源:专利引用数据集cite75_99.txt.(该数据集可以从网址http://www.nber.org/patents/下载) 问题描述: 读取专利引用数据集并对它进行倒排.对于每一个专利,找到那些引用它的专利并进行合并.top5输出结果如下: 1                                3964859, 4647229 10000