【大数据】Hadoop 成长之路 (二) 利用Hadoop分析气象数据集

1.下载气象数据集
    wget -r -c 
    查看数据集
    [[email protected] 2008]# ls
    010030-99999-2008.gz  010231-99999-2008.gz  010460-99999-2008.gz  010570-99999-2008.gz  010881-99999-2008.gz
    010070-99999-2008.gz  010260-99999-2008.gz  010490-99999-2008.gz  010750-99999-2008.gz  010883-99999-2008.gz
    010150-99999-2008.gz  010330-99999-2008.gz  010520-99999-2008.gz  010780-99999-2008.gz  010890-99999-2008.gz
    010230-99999-2008.gz  010450-99999-2008.gz  010550-99999-2008.gz  010830-99999-2008.gz     

2.将数据解压并导入到example文件中
    [[email protected] 2008]# zcat *.gz > example
    查看文件是否正确
    [[email protected] 2008]# tail -10 example 
    0101010980999992008031013004+70367+031100FM-12+001599999V0201801N006019999999N9999999N1-00081-00291099591ADDMA1999999099411MD1710101+9999REMSYN060AAXX  10131 01098 46/// /1806 11008 21029 39941 49959 57010;
    0101010980999992008031014004+70367+031100FM-12+001599999V0201901N006019999999N9999999N1-00071-00241099601ADDMA1999999099411MD1710051+9999REMSYN060AAXX  10141 01098 46/// /1906 11007 21024 39941 49960 57005;
    0171010980999992008031015004+70367+031100FM-12+001599999V0202201N004010042019N0060001N1-00151-00261099611ADDAY171031AY221031GF107991061071004501021999MA1999999099431MD1510021+9999MW1221REMSYN082AAXX  10151 01098 41456 72204 11015 21026 39943 49961 55002 72272 8672/ 333 4////;
    0101010980999992008031016004+70367+031100FM-12+001599999V0202101N005019999999N9999999N1-00121-00211099581ADDMA1999999099401MD1010011+9999REMSYN060AAXX  10161 01098 46/// /2105 11012 21021 39940 49958 50001;
    0101010980999992008031017004+70367+031100FM-12+001599999V0202201N004019999999N9999999N1-00131-00231099591ADDMA1999999099411MD1410001+9999REMSYN060AAXX  10171 01098 46/// /2204 11013 21023 39941 49959 54000;
    0213010980999992008031018004+70367+031100FM-12+001599999V0201901N004010042019N0150001N1-00061-00151099601ADDAA112000021AY171061AY221061GF107991051071004501021999KA1120M-00061MA1999999099421MD1510011+9999MW1701REMSYN100AAXX  10181 01098 11465 71904 11006 21015 39942 49960 55001 69912 77072 8572/ 333 11006 4//// 91107;
    0101010980999992008031019004+70367+031100FM-12+001599999V0201901N006019999999N9999999N1+00001-00101099591ADDMA1999999099411MD1210011+9999REMSYN060AAXX  10191 01098 46/// /1906 10000 21010 39941 49959 52001;
    0101010980999992008031020004+70367+031100FM-12+001599999V0201801N006019999999N9999999N1+00041-00091099621ADDMA1999999099441MD1210031+9999REMSYN060AAXX  10201 01098 46/// /1806 10004 21009 39944 49962 52003;
    0171010980999992008031021004+70367+031100FM-12+001599999V0201901N005010042019N0300001N1+00071-00061099621ADDAY171031AY221031GF107991071071004501999999MA1999999099441MD1210021+9999MW1021REMSYN082AAXX  10211 01098 41480 71905 10007 21006 39944 49962 52002 70272 877// 333 4////;
    0101010980999992008031022004+70367+031100FM-12+001599999V0201901N005019999999N9999999N1+00091-0004        
    
3.将数据集导入到hadoop的in目录的test文件中
    /root/hadoop-1.1.2/bin/hadoop fs -put ./example ./in/test

4.编写MapReduce程序
    cd /root/hadoop-1.1.2/myclass
    [[email protected] myclass]# cat MaxTemperature.java 
    // cc MaxTemperature Application to find the maximum temperature in the weather dataset
    // vv MaxTemperature
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    
    public class MaxTemperature {
    
      public static void main(String[] args) throws Exception {
        if (args.length != 2) {
          System.err.println("Usage: MaxTemperature <input path> <output path>");
          System.exit(-1);
        }
        
        Job job = new Job();
        job.setJarByClass(MaxTemperature.class);
        job.setJobName("Max temperature");
    
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        
        job.setMapperClass(MaxTemperatureMapper.class);
        job.setReducerClass(MaxTemperatureReducer.class);
    
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        
        System.exit(job.waitForCompletion(true) ? 0 : 1);
      }
    }
    // ^^ MaxTemperature 
    
    [[email protected] myclass]# cat MaxTemperatureMapper.java 
    // cc MaxTemperatureMapper Mapper for maximum temperature example
    // vv MaxTemperatureMapper
    import java.io.IOException;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    
    public class MaxTemperatureMapper
      extends Mapper<LongWritable, Text, Text, IntWritable> {
    
      private static final int MISSING = 9999;
      
      @Override
      public void map(LongWritable key, Text value, Context context)
          throws IOException, InterruptedException {
        
        String line = value.toString();
        String year = line.substring(15, 19);
        int airTemperature;
        if (line.charAt(87) == ‘+‘) { // parseInt doesn‘t like leading plus signs
          airTemperature = Integer.parseInt(line.substring(88, 92));
        } else {
          airTemperature = Integer.parseInt(line.substring(87, 92));
        }
        String quality = line.substring(92, 93);
        if (airTemperature != MISSING && quality.matches("[01459]")) {
          context.write(new Text(year), new IntWritable(airTemperature));
        }
      }
    }
    // ^^ MaxTemperatureMapper  
    
    [[email protected] myclass]# cat MaxTemperatureMapper.java 
    // cc MaxTemperatureMapper Mapper for maximum temperature example
    // vv MaxTemperatureMapper
    import java.io.IOException;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    
    public class MaxTemperatureMapper
      extends Mapper<LongWritable, Text, Text, IntWritable> {
    
      private static final int MISSING = 9999;
      
      @Override
      public void map(LongWritable key, Text value, Context context)
          throws IOException, InterruptedException {
        
        String line = value.toString();
        String year = line.substring(15, 19);
        int airTemperature;
        if (line.charAt(87) == ‘+‘) { // parseInt doesn‘t like leading plus signs
          airTemperature = Integer.parseInt(line.substring(88, 92));
        } else {
          airTemperature = Integer.parseInt(line.substring(87, 92));
        }
        String quality = line.substring(92, 93);
        if (airTemperature != MISSING && quality.matches("[01459]")) {
          context.write(new Text(year), new IntWritable(airTemperature));
        }
      }
    }
    // ^^ MaxTemperatureMapper
     
    [[email protected] myclass]# cat MaxTemperatureReducer.java 
    // cc MaxTemperatureReducer Reducer for maximum temperature example
    // vv MaxTemperatureReducer
    import java.io.IOException;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Reducer;
    
    public class MaxTemperatureReducer
      extends Reducer<Text, IntWritable, Text, IntWritable> {
      
      @Override
      public void reduce(Text key, Iterable<IntWritable> values,
          Context context)
          throws IOException, InterruptedException {
        
        int maxValue = Integer.MIN_VALUE;
        for (IntWritable value : values) {
          maxValue = Math.max(maxValue, value.get());
        }
        context.write(key, new IntWritable(maxValue));
      }
    }
    // ^^ MaxTemperatureReducer 
    
4.编译程序
    javac -classpath ../hadoop-core-1.1.2.jar *.java
    查看
    [[email protected] myclass]# ls
    MaxTemperature.class  MaxTemperatureMapper.class  MaxTemperatureReducer.class
    MaxTemperature.java   MaxTemperatureMapper.java   MaxTemperatureReducer.java    

5.制作jar包
    [[email protected] myclass]# jar cvf ../MaxTemperature.jar *.class
    added manifest
    adding: MaxTemperature.class(in = 1413) (out= 799)(deflated 43%)
    adding: MaxTemperatureMapper.class(in = 1876) (out= 805)(deflated 57%)
    adding: MaxTemperatureReducer.class(in = 1687) (out= 717)(deflated 57%) 
    删除类文件:rm -rf *.class
    
6.运行程序
    分析上述导入文件至in/test的数据集,并将分析结果导出到./out_result中
    [[email protected] hadoop-1.1.2]# ./bin/hadoop jar MaxTemperature.jar MaxTemperature ./in/test ./out_result
    16/07/13 23:07:54 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
    16/07/13 23:07:55 INFO input.FileInputFormat: Total input paths to process : 1
    16/07/13 23:07:55 INFO util.NativeCodeLoader: Loaded the native-hadoop library
    16/07/13 23:07:55 WARN snappy.LoadSnappy: Snappy native library not loaded
    16/07/13 23:07:59 INFO mapred.JobClient: Running job: job_201607131558_0001
    16/07/13 23:08:00 INFO mapred.JobClient:  map 0% reduce 0%
    16/07/13 23:08:23 INFO mapred.JobClient:  map 100% reduce 0%
    16/07/13 23:08:38 INFO mapred.JobClient:  map 100% reduce 100%
    16/07/13 23:08:40 INFO mapred.JobClient: Job complete: job_201607131558_0001
    16/07/13 23:08:40 INFO mapred.JobClient: Counters: 29
    16/07/13 23:08:40 INFO mapred.JobClient:   Map-Reduce Framework
    16/07/13 23:08:40 INFO mapred.JobClient:     Spilled Records=300506
    16/07/13 23:08:40 INFO mapred.JobClient:     Map output materialized bytes=1652789
    16/07/13 23:08:40 INFO mapred.JobClient:     Reduce input records=150253
    16/07/13 23:08:40 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=3868651520
    16/07/13 23:08:40 INFO mapred.JobClient:     Map input records=150656
    16/07/13 23:08:40 INFO mapred.JobClient:     SPLIT_RAW_BYTES=108
    16/07/13 23:08:40 INFO mapred.JobClient:     Map output bytes=1352277
    16/07/13 23:08:40 INFO mapred.JobClient:     Reduce shuffle bytes=1652789
    16/07/13 23:08:40 INFO mapred.JobClient:     Physical memory (bytes) snapshot=295931904
    16/07/13 23:08:40 INFO mapred.JobClient:     Reduce input groups=1
    16/07/13 23:08:40 INFO mapred.JobClient:     Combine output records=0
    16/07/13 23:08:40 INFO mapred.JobClient:     Reduce output records=1
    16/07/13 23:08:40 INFO mapred.JobClient:     Map output records=150253
    16/07/13 23:08:40 INFO mapred.JobClient:     Combine input records=0
    16/07/13 23:08:40 INFO mapred.JobClient:     CPU time spent (ms)=12220
    16/07/13 23:08:40 INFO mapred.JobClient:     Total committed heap usage (bytes)=177016832
    16/07/13 23:08:40 INFO mapred.JobClient:   File Input Format Counters 
    16/07/13 23:08:40 INFO mapred.JobClient:     Bytes Read=35197493
    16/07/13 23:08:40 INFO mapred.JobClient:   FileSystemCounters
    16/07/13 23:08:40 INFO mapred.JobClient:     HDFS_BYTES_READ=35197601
    16/07/13 23:08:40 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=3409028
    16/07/13 23:08:40 INFO mapred.JobClient:     FILE_BYTES_READ=1652789
    16/07/13 23:08:40 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=9
    16/07/13 23:08:40 INFO mapred.JobClient:   Job Counters 
    16/07/13 23:08:40 INFO mapred.JobClient:     Launched map tasks=1
    16/07/13 23:08:40 INFO mapred.JobClient:     Launched reduce tasks=1
    16/07/13 23:08:40 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=12976
    16/07/13 23:08:40 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
    16/07/13 23:08:40 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=18769
    16/07/13 23:08:40 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
    16/07/13 23:08:40 INFO mapred.JobClient:     Data-local map tasks=1
    16/07/13 23:08:40 INFO mapred.JobClient:   File Output Format Counters 
    16/07/13 23:08:40 INFO mapred.JobClient:     Bytes Written=9
    
    
7. 查看结果
    [[email protected] hadoop-1.1.2]# ./bin/hadoop fs -ls ./out_result
    Found 3 items
    -rw-r--r--   3 root supergroup          0 2016-07-13 23:08 /user/root/out_result/_SUCCESS
    drwxr-xr-x   - root supergroup          0 2016-07-13 23:08 /user/root/out_result/_logs
    -rw-r--r--   3 root supergroup          9 2016-07-13 23:08 /user/root/out_result/part-r-00000 
    log文件为日志,part文件为结果
    查看part文件内容:
    [[email protected] hadoop-1.1.2]# ./bin/hadoop fs -cat ./out_result/part-r-00000
2008	290
时间: 2024-10-12 22:38:11

【大数据】Hadoop 成长之路 (二) 利用Hadoop分析气象数据集的相关文章

深入大数据架构师之路,问鼎40万年薪视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

大数据的成长历程

大数据是用scala语言,和java有些不同又比java强大,省去了很多繁琐的东西,scala中的的接口用trait来定义,不同于java的接口,trait中可以有抽象方法也可以有不抽象方法.scala中的方法中还可以定义方法,这在java中是从来没有的. 大数据未来几年发展的重点方向,大数据战略已经在十八届五中全会上作为重点战略方向,中国在大数据方面才刚刚起步,但是在美国已经产生了上千亿的市场价值.举个例子,美国通用公司是一个生产飞机发动机的一个公司,这家公司在飞机发动机的每一个零部件上都安装

大数据架构和模式(二)——如何知道一个大数据解决方案是否适合您的组织

简介 在确定投资大数据解决方案之前,评估可用于分析的数据:通过分析这些数据而获得的洞察:以及可用于定义.设计.创建和部署大数据平台的资源.询问正确的问题是一个不错的起点.使用本文中的问题将指导您完成调查.答案将揭示该数据和您尝试解决的问题的更多特征. 尽管组织一般情况对需要分析的数据类型有一些模糊的理解,但具体的细节很可能并不清晰.毕竟,数据可能具有之前未发现的模式的关键,一旦识别了一种模式,对额外分析的需求就会变得很明显.要帮助揭示这些未知的未知信息,首先需要实现一些基本用例,在此过程中,可以

大数据架构和模式(二)如何知道一个大数据解决方案是否适合您的组织

本文收藏于http://kb.cnblogs.com/page/510979/ 作者: Divakar等  来源: DeveloperWorks  发布时间: 2015-01-29 18:20  阅读: 1542 次  推荐: 0   原文链接   [收藏] 摘要:本文介绍一种评估大数据解决方案的可行性的基于维度的方法.通过回答探索每个维度的问题,您可以通过自己对环境的了解来确定某个大数据解决方案对您是否适合.仔细考虑每个维度,就会发现有关是否到了改进您的大数据服务的时候的线索. 简介 在确定投

大数据成神之路-Linux基础

Linux命令 我是小白,我从来没玩过Linux,请点这里: https://user-gold-cdn.xitu.io/2019/2/24/1691e1dda7807059 推荐的一个Git仓库 我有些基础,推荐一个快速查询命令的手册,请点这里: https://github.com/jaywcjlove/linux-command 大数据成神之路目录 大数据开发基础 Java基础 NIO 并发 JVM 分布式 Zookeeper RPC Netty Java基础 NIO 并发容器 JVM 分

大数据平台演进之路 | 淘宝 &amp; 滴滴 &amp; 美团

声明:本文参考了淘宝/滴滴/美团发表的关于大数据平台建设的文章基础上予以整理.参考链接和作者在文末给出. 在此对三家公司的技术人员无私奉献精神表示感谢,如果文章造成了侵权行为,请联系本人删除.本人在尊重事实的基础上重新组织了语言和内容,旨在给读者揭开一个完善的大数据平台的组成和发展过程. 本文在未经本人允许情况下不得转载,否则追究版权责任. By 大数据技术与架构 场景描述:希望本文对那些正在建设大数据平台的同学们有所启发. 关键词:大数据平台 大数据平台是为了计算,现今社会所产生的越来越大的数

Spark 2.x企业级大数据项目实战(实时统计、离线分析和实时ETL)

Spark 2.x企业级大数据项目实战(实时统计.离线分析和实时ETL)全套课程下载:https://pan.baidu.com/s/1mje6bAoLLPrxUIrM-C2VMg 提取码: 9n1x 本门课程来源于一线生产项目, 所有代码都是在现网大数据集群上稳定运行, 拒绝Demo.课程涵盖了离线分析.实时分析绝大部分的场景,通过三个实际生产项目教授如何优雅地集成Hadoop.Spark.HBase.Kafka.Redis.MySQL等相关大数据技术,并实际落地 . 本门课程全程实操,不用担

交通大数据的发展现状与应用难点解决方案分析

改革开放以来,政府一直在不遗余力的加大交通基础设施建设.但是,经济发展带来的人们出行需求的频繁.城镇化深入带来的城市人口剧烈增长,依然给交通带来了前所未有的压力.据不完全统计,2016全国机动车保有量已达到2.95亿辆:交通拥堵指数超过1.5的城市有56个,其中三分之一的城市拥堵指数呈上升态势:民航航班正常率不足70%,交通困局已经成为了从普通群众到政府领导都密切关注的民生问题. 交通大数据建设的现状与痛点 2015年3月5日,李克强总理在政府工作报告中首次提出"互联网+"行动计划,推

苏宁人工智能研发中心智能创意平台架构成长之路(二)--大数据架构篇

苏宁人工智能研发中心智能创意平台架构成长之路(一)--长篇开篇 https://www.cnblogs.com/laoqing/p/11326132.html   我们接着第一篇继续. (这是第二篇大数据架构篇,成长之路序列会包含多篇,笔者作为这个平台的架构兼技术经理,充分讲述其中的迭代心酸之路以及中间遇到的问题和解决方案) 声明:文章不涉及公司内部技术资料的外泄,涉及的图片都是重画的简易架构图,主要通过架构的演进,讲述分享技术的迭代之路和过程. 在第二轮迭代完成后,第三轮迭代中,我们就开始做平