大数据行业部署实战2:环境大数据统计

article/2025/6/22 23:23:20

实验二、环境大数据(必须基于实验一验证通过的环境)

  • 一、实验目的
  • 二、实验要求
  • 三、实验原理
  • 四、实验步骤
    • 1、 分析数据文件
    • 2、 将数据文件上传至HDFS
    • 3 、编写月平均气温统计程序
    • 4 、查看月平均气温统计结果
    • 5、 编写每日空气质量统计程序
    • 6、 查看每日空气质量统计结果
    • 7 、将每日空气质量统计文件进行整合
    • 8、 编写各空气质量天数统计程序
    • 9 、查看各空气质量天数统计结果
  • 五、其他

一、实验目的

  1. 学会分析环境数据文件;
  2. 学会编写解析环境数据文件并进行统计的代码;
  3. 学会进行递归MapReduce。

二、实验要求

在服务器上运行从北京2016年1月到6月这半年间的历史天气和空气质量数据文件中分析出的环境统计结果,包含月平均气温、空气质量分布情况等。

三、实验原理

近年来,由于雾霾问题的持续发酵,越来越多的人开始关注城市相关的环境数据,包括空气质量数据、天气数据等等。
如果每小时记录一次城市的天气实况和空气质量实况信息,则每个城市每天都会产生24条环境数据,全国所有2500多个城市如果均如此进行记录,那每天产生的数据量将达到6万多条,每年则会产生2190万条记录,已经可以称得上环境大数据。
对于这些原始监测数据,我们可以根据时间的维度来进行统计,从而得出与该城市相关的日度及月度平均气温、空气质量优良及污染天数等等,从而为研究空气污染物扩散条件提供有力的数据支持。
本实验中选取了北京2016年1月到6月这半年间的每小时天气和空气质量数据(未取到数据的字段填充“N/A”),利用MapReduce来统计月度平均气温和半年内空气质量为优、良、轻度污染、中度污染、重度污染和严重污染的天数。

四、实验步骤

1、 分析数据文件

打开terminal,在家目录下,下载并查看环境数据文件beijing.txt

wget http://i9000.net:8888/sgn/HUP/HadoopDeployPro/beijing.txt

查看前20行数据

head -20 beijing.txt

在这里插入图片描述
图1环境数据文件格式可以看到,我们需要关心的数据有第一列DATE、第二列HOUR、第六列TMP和第七列AQI。

2、 将数据文件上传至HDFS

将家目录下数据beijing.txt上传到HDFS的/input目录上。

hadoop fs -mkdir /input
hadoop fs -put ~/beijing.txt /input

3 、编写月平均气温统计程序

打开eclipse——Window——preferences,选择Hadoop的安装目录如下图,点击apply and close
在这里插入图片描述
在这里插入图片描述
在Eclipse上新建MapReduce项目,命名为TmpStat,在src目录下新建文件 TmpStat.java,并键入如下代码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import java.io.IOException;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.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;public class TmpStat
{                                                                                 public static class StatMapper extends Mapper<Object, Text, Text, IntWritable>{private IntWritable intValue = new IntWritable();private Text dateKey = new Text();public void map(Object key, Text value, Context context)throws IOException, InterruptedException{String[] items = value.toString().split(",");String date = items[0];String tmp = items[5];if(!"DATE".equals(date) && !"N/A".equals(tmp)){//排除第一行说明以及未取到数据的行dateKey.set(date.substring(0, 6));intValue.set(Integer.parseInt(tmp));context.write(dateKey, intValue);}}}public static class StatReducer extends Reducer<Text, IntWritable, Text, IntWritable>{private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values, Context context)throws IOException, InterruptedException{int tmp_sum = 0;int count = 0;for(IntWritable val : values){tmp_sum += val.get();count++;}int tmp_avg = tmp_sum/count;result.set(tmp_avg);context.write(key, result);}}public static void main(String args[])throws IOException, ClassNotFoundException, InterruptedException{Configuration conf = new Configuration();  Job job = Job.getInstance(conf, "MonthlyAvgTmpStat");           job.setInputFormatClass(TextInputFormat.class);TextInputFormat.setInputPaths(job, args[0]);  job.setJarByClass(TmpStat.class);             job.setMapperClass(StatMapper.class);           job.setMapOutputKeyClass(Text.class);         job.setMapOutputValueClass(IntWritable.class);job.setPartitionerClass(HashPartitioner.class);job.setReducerClass(StatReducer.class);job.setNumReduceTasks(Integer.parseInt(args[2]));job.setOutputKeyClass(Text.class);              job.setOutputValueClass(IntWritable.class);            job.setOutputFormatClass(TextOutputFormat.class);TextOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);   }
}

使用Eclipse软件将TmpStat项目导出成Jar文件,指定主类为TmpStat,命名为tmpstat.jar,并保存至家目录下
在这里插入图片描述
在这里插入图片描述

4 、查看月平均气温统计结果

在client上执行tmpstat.jar,指定输出目录为/monthlyavgtmp,reducer数量为1。如图2所示:

cd ~
hadoop jar tmpstat.jar TmpStat /input /monthlyavgtmp 1

在这里插入图片描述
图2 运行tmpstat.jar
查看统计结果。如图3所示:

hadoop fs -ls /monthlyavgtmp
hadoop fs -cat /monthlyavgtmp/part-r-00000

在这里插入图片描述
图3 查看月平均气温统计结果

5、 编写每日空气质量统计程序

在Eclipse上新建MapReduce项目,命名为AqiStatDaily,在src目录下新建文件 AqiStatDaily.java,并键入如下代码。

import java.io.IOException;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.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;public class AqiStatDaily
{public static class StatMapper extends Mapper<Object, Text, Text, IntWritable>{private IntWritable intValue = new IntWritable();private Text dateKey = new Text();public void map(Object key, Text value, Context context)throws IOException, InterruptedException{String[] items = value.toString().split(",");String date = items[0];String aqi = items[6];if(!"DATE".equals(date) && !"N/A".equals(aqi)){dateKey.set(date);intValue.set(Integer.parseInt(aqi));context.write(dateKey, intValue);}}}public static class StatReducer extends Reducer<Text, IntWritable, Text, IntWritable>{private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values, Context context)throws IOException, InterruptedException{int aqi_sum = 0;int count = 0;for(IntWritable val : values){aqi_sum += val.get();count++;}int aqi_avg = aqi_sum/count;result.set(aqi_avg);context.write(key, result);}}public static void main(String args[])throws IOException, ClassNotFoundException, InterruptedException{Configuration conf = new Configuration();     Job job = Job.getInstance(conf, "AqiStatDaily");           job.setInputFormatClass(TextInputFormat.class);TextInputFormat.setInputPaths(job, args[0]);  job.setJarByClass(AqiStatDaily.class);             job.setMapperClass(StatMapper.class);           job.setMapOutputKeyClass(Text.class);         job.setMapOutputValueClass(IntWritable.class);job.setPartitionerClass(HashPartitioner.class);job.setReducerClass(StatReducer.class);job.setNumReduceTasks(Integer.parseInt(args[2]));job.setOutputKeyClass(Text.class);              job.setOutputValueClass(IntWritable.class);            job.setOutputFormatClass(TextOutputFormat.class);TextOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);   }
}

在这里插入图片描述
使用Eclipse软件将AqiStatDaily项目导出成Jar文件,指定主类为AqiStatDaily,命名为aqistatdaily.jar,并保存在家目录下。

6、 查看每日空气质量统计结果

在家目录下执行aqistatdaily.jar,指定输出目录为/aqidaily,reducer数量为3。如图4所示:

cd ~
hadoop jar aqistatdaily.jar AqiStatDaily /input /aqidaily 3

在这里插入图片描述
图4 运行aqistatdaily.jar
查看统计结果文件。如图5所示:

hadoop fs -ls /aqidaily

在这里插入图片描述
图5 查看aqistatdaily.jar运行结果文件
可以看到,结果文件被分成了3个部分,依次查看这3个文件的内容,即可看到每天的空气质量统计结果数据。如图6所示:

hadoop fs -cat /aqidaily/p*

在这里插入图片描述
图6 查看每日空气质量统计结果

7 、将每日空气质量统计文件进行整合

将每日空气质量统计结果保存到aqidaily.txt。

hadoop fs -cat /aqidaily/part-r-00000 > aqidaily.txt
hadoop fs -cat /aqidaily/part-r-00001 >> aqidaily.txt
hadoop fs -cat /aqidaily/part-r-00002 >> aqidaily.txt

在这里插入图片描述

cat aqidaily.txt |wc -l

在HDFS上创建/aqiinput目录,并将aqidaily.txt上传至该目录下

hadoop fs -mkdir /aqiinput
hadoop fs -put aqidaily.txt /aqiinput

8、 编写各空气质量天数统计程序

在Eclipse上新建MapReduce项目,命名为AqiStat,在src目录下新建文件 AqiStat.java,并键入如下代码。

import java.io.IOException;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.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;public class AqiStat
{public static final String GOOD = "优";public static final String MODERATE = "良";public static final String LIGHTLY_POLLUTED = "轻度污染";public static final String MODERATELY_POLLUTED = "中度污染";public static final String HEAVILY_POLLUTED = "重度污染";public static final String SEVERELY_POLLUTED = "严重污染";public static class StatMapper extends Mapper<Object, Text, Text, IntWritable>{private final static IntWritable one = new IntWritable(1);private Text cond = new Text();// map方法,根据AQI值,将对应空气质量的天数加1public void map(Object key, Text value, Context context)throws IOException, InterruptedException{String[] items = value.toString().split("\t");int aqi = Integer.parseInt(items[1]);if(aqi <= 50){// 优cond.set(GOOD);}else if(aqi <= 100){// 良cond.set(MODERATE);}else if(aqi <= 150){// 轻度污染cond.set(LIGHTLY_POLLUTED);}else if(aqi <= 200){// 中度污染cond.set(MODERATELY_POLLUTED);}else if(aqi <= 300){// 重度污染cond.set(HEAVILY_POLLUTED);}else{// 严重污染cond.set(SEVERELY_POLLUTED);}context.write(cond, one);}}// 定义reduce类,对相同的空气质量状况,把它们<K,VList>中VList值全部相加public static class StatReducer extends Reducer<Text, IntWritable, Text, IntWritable>{private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values,Context context)throws IOException, InterruptedException{int sum = 0;for (IntWritable val : values){sum += val.get();}result.set(sum);context.write(key, result);}}public static void main(String args[])throws IOException, ClassNotFoundException, InterruptedException{Configuration conf = new Configuration();     Job job = Job.getInstance(conf, "AqiStat");           job.setInputFormatClass(TextInputFormat.class);TextInputFormat.setInputPaths(job, args[0]);  job.setJarByClass(AqiStat.class);             job.setMapperClass(StatMapper.class);job.setCombinerClass(StatReducer.class);job.setMapOutputKeyClass(Text.class);         job.setMapOutputValueClass(IntWritable.class);job.setPartitionerClass(HashPartitioner.class);job.setReducerClass(StatReducer.class);job.setNumReduceTasks(Integer.parseInt(args[2]));job.setOutputKeyClass(Text.class);              job.setOutputValueClass(IntWritable.class);            job.setOutputFormatClass(TextOutputFormat.class);TextOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);   }
}

使用Eclipse软件将AqiStat项目导出成Jar文件,指定主类为AqiStat,命名为aqistat.jar,并保存至家目录下。

9 、查看各空气质量天数统计结果

在家目录下执行aqistat.jar,指定输出目录为/aqioutput,reducer数量为1。如图7所示:

hadoop jar aqistat.jar AqiStat /aqiinput /aqioutput 1

在这里插入图片描述
图7 运行aqistat.jar
查看统计结果。如图8所示:

hadoop fs -ls /aqioutput
hadoop fs -cat /aqioutput/part-r-00000

在这里插入图片描述
图8 查看各空气质量状况天数统计结果

五、其他

1.复制到虚拟机时不能有中文
2.文件名前面有*时,按Ctrl+S保存,星号就没有了
3.删除无数据的文件。Hadoop dfs -rm -r /monthlyavgtmp


http://chatgpt.dhexx.cn/article/SHMdLHDt.shtml

相关文章

大数据(2)--Hadoop

目录标题 1.初识大数据1.1 大数据相关技术1.2 日志流量分析系统1.2.1 项目设计1.2.2 日志的捕获1.2.3 离线分析1.2.4 实时分析 1.3 系统搭建 2.Hadoop2.1 Hadoop概述2.1.1 历史2.1.2 作用 2.2 Hadoop的安装2.2.1 Hadoop版本介绍2.2.2 Hadoop 的安装有三种方式2.2.3 Hadoop伪分布…

《大数据时代》书评及书摘

三天的零碎时间把这本书读完了&#xff0c;内容本身其实很简单&#xff0c;也谈不上特别精彩&#xff0c;五分制的话我只能打三分。 我的理解&#xff0c;数据一生应该是包含了三个阶段&#xff1a;收集&#xff0c;分析&#xff0c;最后是预测。我们总能根据现有的数据&#x…

Python 与SQL sever数据库 图形化智能停车场管理系统

这个是我的一次课程设计&#xff0c;写了236行代码&#xff0c;都是最简单的函数和图形化界面。特别简单。首先你应该确保你的SQL数据库可以在Pycham中连接成功。不会SQL连接的的可以去其他博客写看一看。在Pycham中需要安装 Tkinter win32com.client 第三方库。 序言界面截…

asp毕业设计——基于asp+sqlserver的WEB车辆管理系统设计与实现(毕业论文+程序源码)——车辆管理系统

基于aspsqlserver的WEB车辆管理系统设计与实现&#xff08;毕业论文程序源码&#xff09; 大家好&#xff0c;今天给大家介绍基于aspsqlserver的WEB车辆管理系统设计与实现&#xff0c;文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模…

基于Java+控制台实现车辆信息管理系统

基于Java控制台实现车辆信息管理系统 一、系统介绍二、功能展示1.主要功能2.查看所有车辆信息3.车辆信息添加4.车辆信息查询5.车辆信息删除 三、系统实现1.car.java 四、其它1.其他系统实现 五、源码下载 一、系统介绍 该系统实现了简单的增删查改、采用面对对象&#xff08;O…

qt 汽车管理系统

界面设计 运行后界面 数据库表: connection.h文件 #ifndef CONNECTION_H #define CONNECTION_H #include<Qtsql> #include<QDebug> #include<qdom.h> #include<QDebug> #include <QSqlQuery> static bool createConnection() { // "O…

计算机毕业设计-基于SSM的汽车维修管理系统

项目背景 随着计算机技术的高速发展&#xff0c;现代计算机系统已经从以计算为中心向以信息化处理为中心的方向发展。而汽车维修&#xff0c;不仅需要在硬件上为现代社会的人们提供一个汽车维修的平台&#xff0c;获取汽车知识的环境&#xff0c;更要在软件上为车辆提供汽车维…

ASP.NET+C#+Sql Server 1125数据库 汽车租赁系统的设计与实现+讲解视频

绪论 随着汽车行业的快速发展&#xff0c;汽车租赁行业交易的数量也随之增加&#xff0c;自2000年起&#xff0c;我国汽车租赁交易量开始进入一个快速发展的状态&#xff0c;也是汽车行业市场经济发展的重要一部分&#xff0c;近几年&#xff0c;越来越多汽车租赁公司进军当前…

Java项目:springBoot+Vue汽车销售管理系统

作者主页&#xff1a;夜未央5788 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目基于spring boot以及Vue开发&#xff0c;为前后端分离的项目。针对汽车销售提供客户信息、车辆信息、订单信息、销售人员管理、财务报表等功能…

基于JSP的物流公司信息管理系统设计与实现

目 录 第一章 绪论 1 1.1 研究背景 1 1.2课题研究意义 1 1.3 国内外的研究状况 2 第二章 相关技术分析 3 2.1技术简介 3 2.2 工作原理 3 2.3体系结构 3 2.4编程语言的特点 3 2.5 数据库 4 第三章 需求分析 5 3.1 可行性分析 5 3.1.1 经济可行性 5 3.1.2 技术可行性 5 3.1.3 运…

C#毕业设计——基于C#+asp.net+sqlserver的汽车销售管理系统设计与实现(毕业论文+程序源码)——汽车销售管理系统

基于C#asp.netsqlserver的汽车销售管理系统设计与实现&#xff08;毕业论文程序源码&#xff09; 大家好&#xff0c;今天给大家介绍基于C#asp.netsqlserver的汽车销售管理系统设计与实现&#xff0c;文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及…

汽车销售管理系统

文章目录 汽车销售管理系统**背景****环境****项目结构**项目详情**数据库****DBConn.java****Login.java****Data.java****CircleProgressBar.java**运行截图 汽车销售管理系统 背景 Java基础课程设计 环境 数据库&#xff1a;MySQL8.0开发环境&#xff1a;JDK1.8开发工具…

Java+SSM+Jsp+Mysql实现Web汽车信息管理系统

目录 一、系统介绍 1.开发环境 2.技术选型 3.系统功能 4.数据库文件 5.工程截图 二、系统展示 1.登录系统 2.系统首页 3.用户管理-添加用户 4.用户管理-查询用户 5.用户管理-修改用户 6.客户管理-添加客户 7.客户管理-查询客户 8.客户管理-修改客户 9.汽车管理-…

基于Java+Swing+Mysql实现汽车信息管理系统(含实训报告)

TOC 一、系统介绍 系统实现汽车入库&#xff0c;汽车出库&#xff0c;汽车查询&#xff0c;汽车信息修改和管理员登录等功能 二、功能展示 1.登陆 2.车辆信息 3.车辆入库 4.车辆出库 5.车辆查询 6、车辆信息修改 三、数据库 /*Navicat Premium Data TransferSource Serv…

汽车租赁管理系统的设计与实现(JSP+SqlServer在线租车网站)

目录 第一章 系统概述 1 1.1背景 1 1.2发展现状 1 第二章 需求分析 2 2.1 功能需求 2 2.2 数据需求 3 第三章 系统设计 5 3.1系统结构 5 3.2 数据库设计 5 3.2.1 ER图 6 3.2.2 逻辑结构 6 3.2.3 数据库物理结构 7 3.2.4 数据库实现 9 3.3用户控制系统 9 3.4模块设计 10 3.4.1 汽…

Qt下的综合练习—汽车信息管理系统(三)车辆出售功能的实现

项目介绍 这次练习的项目是汽车信息管理系统&#xff0c;项目参考Qt5开发及实例&#xff08;第3版&#xff09;中的汽车销售管理系统&#xff0c;写到博客上的目的是为了梳理自己的思路&#xff0c;所以代码很大程度上是参照书上的实例。 项目实现了车辆与销售的的管理&#xf…

Java课程设计——汽车信息租赁信息管理系统

一&#xff0e;功能需求 需求分析是发现需求&#xff0c;分析求精&#xff0c;逻辑建模&#xff0c;需求规约的过程&#xff0c;其的目的是为了全面获取软件需求&#xff0c;准确理解业务逻辑。车辆租赁系统具有以下基本功能。 用户管理&#xff1a; 包括用户的注册,登陆等&a…

Java GUI+SQL Server开发车辆管理系统

Java GUISQL Server开发车辆管理系统 一、程序功能设计 本项目为“车辆管理系统”&#xff0c;需包含一下功能&#xff1a; 1)车辆管理模块&#xff0c;增删查改车辆信息 2)租车管理模块&#xff0c;增删查改租车记录 3)换车管理模块&#xff0c;增删查改换车记录 4)修车…

Java+MySQL汽车租赁管理系统课程设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;汽车租赁系统 获取完整源码源文件视频演示文档资料等 一、 课程设计目的 1、综合运用Java程序设计课程和其他相关课程的理论和知识&#xff0c;掌握面向对象程序设计的一般方法、常用技术及技巧&#xff0c;树立良好的软件…

QT+SQL Server实现车辆管理系统 -简介

QTSQL Server 实现车辆管理系统 -简介 1.摘要2.界面展示及其功能介绍2.1 登录界面2.2 申请账户界面2.3 管理员界面2.3.1 添加车辆功能界面2.3.2 查询、删除、修改车辆信息功能界面2.3.3 添加司机功能界面2.3.4 查询、删除司机功能界面 2.4 普通用户界面2.4.1 查询车辆信息功能窗…