用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\t%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('\t', 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\t%d' % (current_date, current_temperature))
current_temperature = temperature
current_date = date if current_date == date:
print('%s\t%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中包含了部分的天气数据

下面是运行截图:

运行成功后可编写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打印截图:

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

用mapreduce 处理气象数据集的更多相关文章

  1. MapReduce处理气象数据

    老师:MissDu 提交作业 1. 用Python编写WordCount程序并提交任务 程序 WordCount 输入 一个包含大量单词的文本文件 输出 文件中每个单词及其出现次数(频数),并按照单 ...

  2. Hadoop第5周练习—MapReduce计算气象温度等例子

    :对云计算的看法 内容 :使用MapReduce求每年最低温度 内容 :求温度平均值能使用combiner吗? 内容 :使用Hadoop流求最高温度(awk脚本) 内容 :使用Hadoop流求最高温度 ...

  3. Hadoop—MapReduce计算气象温度

    Hadoop-MapReduce计算气象温度 1 运行环境说明 1.1 硬软件环境 主机操作系统:Mac OS 64 bit ,8G内存 虚拟软件:Parallers Desktop12 虚拟机操作系 ...

  4. 《Hadoop权威指南》(Hadoop:The Definitive Guide) 气象数据集下载脚本

    已过时,无法使用 从网上找到一个脚本,修改了一下 #!/bin/bash CURRENT_DIR=$(cd `dirname $0`; pwd) [ -e $CURRENT_DIR/ncdc ] || ...

  5. Hadoop和MapReduce初识

    我们生活在大数据时代!!!微博.微信.云存储等大数据的需求,Hadoop由此诞生. 以下面部分数据为例: 1)Facebook存储着约100亿张照片,约1PB存储容量: 2)纽约证券交易所每天产生1T ...

  6. mapreduce实战:统计美国各个气象站30年来的平均气温项目分析

    气象数据集 我们要写一个气象数据挖掘的程序.气象数据是通过分布在美国各地区的很多气象传感器每隔一小时进行收集,这些数据是半结构化数据且是按照记录方式存储的,因此非常适合使用 MapReduce 程序来 ...

  7. 关于 MapReduce

    继续摘抄<Hadoop 权威指南>第二章,跳过不少于我复杂的东西,但依然是捉急的效率,开始觉得看不完另外一本全英文的书,大概每天要看5页吧... 以上. MapReduce 是一种可用于数 ...

  8. MapReduce原理及操作

    注意:本实验是对前述实验的延续,如果直接点开始实验进入则需要按先前学习的方法启动hadoop 部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录 ...

  9. Hadoop阅读笔记(一)——强大的MapReduce

    前言:来园子已经有8个月了,当初入园凭着满腔热血和一脑门子冲动,给自己起了个响亮的旗号“大数据 小世界”,顿时有了种世界都是我的,世界都在我手中的赶脚.可是......时光飞逝,岁月如梭~~~随手一翻 ...

随机推荐

  1. phper的Go之旅(-)--书写前言

    前言:由于我使用的主力机是mac,所以整系列教程都以mac为主,后期可能会更新windows,有时间的话,截止写这篇博客的时间我是一个全职php开发工程师,之所以要写这篇 教程原因就是现在技术语言层出 ...

  2. 【JVM虚拟机】(8)--深入理解Class中--方法、属性表集合

    #[JVM虚拟机](8)--深入理解Class中--方法.属性表集合 之前有关class文件已经写了两篇博客: 1.[JVM虚拟机](5)---深入理解JVM-Class中常量池 2.[JVM虚拟机] ...

  3. 『备注』GDI+ 绘制文本有锯齿,透明背景文本绘制

    背景: GDI+ 绘制文本 时,如果 背景是透明的 —— 则会出现 锯齿. //其实,我不用这三个 属性 好多年了 //而且,这三个属性 在关键时刻还有可能 帮倒忙 //关键是:这三个属性,鸟用都没有 ...

  4. 学web前端的第一天

    大家好,我是蓝颜.上次写博客是18年的4月份,不是不想写,是不知道怎么写,求写博客的技巧.从今天开始一天一更,不管写的怎么样,坚持的写下去.闲话不多说,第一次接触前端,什么都不懂,因为对这玩意的热爱, ...

  5. 第一章 渲染调度来龙去脉——插入自己的shader

    总有人会问,这个或者那个功能怎么弄,或者看到别人做了什么酷炫的效果也想仿造.其实,功能的实现无非两种: 1.调用Cesium现有的API组合实现:往往照猫画虎,还存在性能不过关的问题,绕了半天其实终究 ...

  6. ArcGIS JS Api 4.x修改三维球背景技巧

        通过修改scenceview.js中tileBackground和defaultTileBackground中的png的base64编码就可以达到要求. 4.8中通过修改scenceview. ...

  7. react native中使用echarts

    开发平台:mac pro node版本:v8.11.2 npm版本:6.4.1 react-native版本:0.57.8 native-echarts版本:^0.5.0 目标平台:android端收 ...

  8. 第四周LINUX 学习笔记

    内核编译丶sed丶awk Linux:单内核    模块化:动态      /lib/modules      lsmod,modinfo,modprobe,insmod,,modprobe -r , ...

  9. cmd 执行Dcpromo错误:在该 SKU 上不支持 Active Directory 域服务安装向导,Windows Server 2008 R2 Enterprise 配置AD(Active Directory)域控制器

    今天,要安装AD域控制器,运行dcpromo结果提示:在该 SKU 上不支持 Active Directory 域服务安装向导. 以前弄的时候直接就通过了,这次咋回事?终于搞了大半天搞定了. 主要原因 ...

  10. 两个inline-block中间有空白,解决inline-block 元素之间的空白问题

    目录 一.遇到的问题 二.举个简单的栗子分析问题 三.解决办法 一.遇到的问题 前些天写瀑布流布局的时候,发现明明计算好了宽度使得一行能放下三张图片,实际效果却总是放不下,图片会挤到下一行去.上图: ...