zoukankan      html  css  js  c++  java
  • 用mapreduce 处理气象数据集

    用mapreduce 处理气象数据集
    编写程序求每日最高最低气温,区间最高最低气温

    气象数据集下载地址为:ftp://ftp.ncdc.noaa.gov/pub/data/noaa

    • 按学号后三位下载不同年份月份的数据(例如201506110136号同学,就下载2013年以6开头的数据,看具体数据情况稍有变通)
    • 解压数据集,并保存在文本文件中
    • 对气象数据格式进行解析
    • 编写map函数,reduce函数
    • 将其权限作出相应修改
    • 本机上测试运行代码
    • 放到HDFS上运行
    • 将之前爬取的文本文件上传到hdfs上
    • 用Hadoop Streaming命令提交任务
    • 查看运行结果

    本次的所有操作均在当前用户目录下的/temp/2018-05-09
    通过wget下载压缩文件,命令如下:

    wget -drc --accept-regex=REGEX -P data ftp://ftp.ncdc.noaa.gov/pub/data/noaa/2015/6*
    

    在这之前,需要配置好环境,在.bashrc中加入下面的命令

    export PATH=$PATH:/usr/local/hbase/bin:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
    export HADOOP_HOME=/usr/local/hadoop
    export STREAM=$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar
    
    

    下载后解压,之后启动hdfs,将解压文件放入系统中,命令如下

    start-dfs.sh
    hdfs dfs -mkdir weather_data 
    hdfs dfs -put weather.txt weather_data/
    

    文件放入系统后可以编写mapper.py了,主要代码如下:

    import sys
    
    for line in sys.stdin:
        line = line.strip()
        print('%s	%d' % (line[15:23], int(line[87:92])))
    

    reducer.py了,主要代码如下:

    from operator import itemgetter
    import sys
    
    current_date = None
    current_temperature = 0
    date = None
    
    for line in sys.stdin:
        line = line.strip()
        date, temperature = line.split('	', 1)
        try:
            temperature = int(temperature)
        except ValueError:
            continue
    
        if current_date == date:
            if current_temperature < temperature:
                current_temperature = temperature
        else:
            if current_date:
                print('%s	%d' % (current_date, current_temperature))
            current_temperature = temperature
            current_date = date
    
    if current_date == date:
        print('%s	%d' % (current_date, current_temperature))
    
    

    上面的reducer是求出最高气温,求出最低只需要将
    if current_temperature < temperature:改为 if current_temperature > temperature:

    这里测试运行mapper和reducer,命令如下:

    chmod a+x mapper.py 
    chmod a+x reducer.py 
    cat test.txt | python mapper.py | python reducer.py 
    
    

    test.txt中包含了部分的天气数据
    下面是运行截图:
    enter description here

    运行成功后可编写run.sh

    
    hadoop jar $STREAM 
    -D stream.non.zero.exit.is.failure=false 
    -file /home/hadoop/temp/2018-05-09/mapper.py 
    -mapper 'python /home/hadoop/temp/2018-05-09/mapper.py' 
    -file /home/hadoop/temp/2018-05-09/reducer.py 
    -reducer 'python /home/hadoop/temp/2018-05-09/reducer.py' 
    -input /user/hadoop/weather_data/*.txt 
    -output /user/hadoop/weather_output
    
    

    运行run.sh

    source run.sh
    

    最后的运行结果通过cat打印截图:
    enter description here

    /temp下的文件在链接中下载

  • 相关阅读:
    2017.11.20 定时器与数码管
    2017.11.19 C语言基础及流水灯实现
    libcmtd.lib(exe_wwinmain.obj) : error LNK2001: 无法解析的外部符号 _wWinMain@16
    VCatlmfcincludeafx.h(24): fatal error C1189: #error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
    VS2015解决 error C4996: 'strdup': The POSIX name for this item is deprecated.
    vs2015单元测试
    pkg-config的一些用法
    CMake快速入门
    CMake入门教程
    Ubuntu16.04下安装NVIDIA显卡驱动
  • 原文地址:https://www.cnblogs.com/lger/p/9016526.html
Copyright © 2011-2022 走看看