基于hadoop的气象数据分析系统

1. 系统概述

1.1 系统背景介绍

随着全球气候变化的日益严峻,气象数据的收集、处理和分析变得尤为重要。ISD-Lite数据集是由NOAA提供的,它包含了全球多个气象观测站的基本气象信息,如温度、湿度、气压、风速和风向等。这些数据对于研究气候变化、预测天气以及制定相关政策具有重要意义。

本项目旨在通过自动化脚本从NOAA的FTP服务器上爬取2024年的ISD-Lite气象数据,并对其进行处理和分析。爬取的数据将用于进一步的研究,以揭示气象要素之间的关系,提高天气预报的准确性,并为气候变化研究提供数据支持。

1.2 系统架构设计

本系统采用模块化设计,主要包括数据爬取、数据存储、数据处理和数据分析四个模块。

数据爬取模块

    1. 使用wget命令通过FTP协议从NOAA的服务器上爬取指定时间范围内的ISD-Lite数据集。
    2. 设置合适的正则表达式(REGEX)以匹配需要下载的文件名,确保只下载2024年全年月份的数据。
    3. 将下载的数据保存到本地指定的目录(如data目录)中。

数据存储模块

    1. 将爬取到的原始数据文件进行解压和整理,以便后续处理。
    2. 考虑使用Hive、HBase或MySQL等数据库系统来存储数据,以便进行高效的查询和分析。
    3. 设计合理的数据库表结构,以存储从原始数据中提取出的关键信息。

数据处理模块

  1. 对存储的数据进行预处理,包括数据清洗、格式转换和缺失值处理等。
  2. 根据需求对数据进行聚合、汇总或计算衍生变量。
  3. 编写数据处理脚本,实现自动化处理流程。

数据分析模块

  1. 使用 FineBI工具对处理后的数据进行统计分析、可视化展示和模型构建。
  2. 分析气象要素之间的相关性、趋势和异常值等。
  3. 根据分析结果撰写报告或制作图表,以直观展示数据特征和分析结果。

在系统实现过程中,还需要考虑数据的安全性、完整性和一致性等问题。同时,为了提高系统的可扩展性和可维护性,建议采用面向对象的编程思想进行模块化设计,并编写详细的文档和注释。

  1. 数据采集模块的设计与开发

2.1 数据采集

利用wget下载源文件,获得2024年10月的气象数据,具体操作如下图所示

wget -D --accept-regex=REGEX -P data -r 
    -c ftp://ftp.ncdc.noaa.gov/pub/data/noaa/isd-lite/2019/5*
 

图2-1 wget下载源文件

切换到目的数据存储目录,通过ls命令查看已下载数据,具体数据如下图所示

图2-2 ls命令查看已下载数据

将数据归整在data.txt里

zcat 2019/*.gz > data.txt

上传到HDFS,查看uer/Hadoop/in 已存在data.txt,具体命令和结果如下图2-3 2-4所示

图2-3 上传hdfs

图2-4 查看hdfs 结果

2.2 数据初步分析

开始创建Hive表,具体命令如下图所示

图2-5 创建Hive表

加载数据到hive使用语句。

’LOAD DATA INPATH '/usr/hadoop/temperature/2024-12-17-23-08-22/part-r-00000' INTO TABLE temperaturee;’具体操作如下图2-6所示。

图2-6 加载数据到hive操作

查询明细表前5条数据, 具体如下图所示。

查询明细表前5条数据, 具体如下图所示。

图2-7 temperature数据查看

查询2024全年平均温度,四舍五入后处理结果为平均温度14度,显示结果如下图所示。

图2-8查询2024全年平均温度

查询2024全年高于平均温度的天数,查询结果为202天,显示结果如下如图所示。

图2-9查询2024全年高于平均温度的天

3. 数据预处理模块的设计与开发

3.1 Maven项目创建

1. 创建Maven项目 在 IDEA 创建一个名为 HadoopDataReport 的 Maven 项目,并且在项目中创建包 cn.itcast.hadoop,该包用于存放实现 MapReduce程序的相关类

图3-1 Maven项目结构

3.2 实现map阶段

1. 实现Map阶段 实现Map阶段需要用户自定义Mapper组件,在HadoopDataReport项目的 cn.itcast.hadoop包中创建用于自定义Mapper组件的类WeatherMapper,在该类中编写数据预处 理的相关代码,具体如图2-1所示。

图3-2 WeatherMapper包

这个WeatherMapper类是一个Hadoop MapReduce的Mapper实现,专门用于处理天气数据。它继承自Mapper<LongWritable, Text, Text, Text>,这意味着它接收的输入键(Key)类型是LongWritable(通常代表文件偏移量),输入值(Value)类型是Text(代表文件中的一行文本),并且它输出的键和值类型也都是Text。这个Mapper实现了以下功能:

  1. 解析天气数据行:输入的每一行文本(Text类型的value)被假定为包含天气数据的字符串。这个字符串被按空格分割成字段(fields数组),其中每个字段代表不同的数据(如日期、时间、气温等)。
  2. 验证数据完整性:Mapper首先检查每行数据是否至少包含5个字段(日期、时间、可能的其他字段、气温)。如果数据不完整(字段数少于5),则忽略该行。
  3. 提取日期和气温:如果数据完整,Mapper从字段中提取日期(fields[0], fields[1], fields[2])和气温(fields[4])。日期字段被格式化为YYYY-MM-DD的形式,并存储在dateKey中。
  4. 处理气温数据:气温数据(tempRaw)被假定为一个长整型(long)值。Mapper检查这个值是否不等于MISSING(即-9999L),这是一个标记,表示气温数据缺失或无效。如果气温数据有效,Mapper将其除以一个缩放因子(SCALE_FACTOR,这里是10),将结果转换为整数,并存储在tempValue中。这个步骤可能是为了将气温数据从某种测量单位转换为更常用的单位(例如,从十分之一度转换为度)。
  5. 输出键值对:对于每个有效的日期和气温对,Mapper将它们作为键值对输出。键是格式化后的日期(dateKey),值是转换后的气温(tempValue)。这些键值对被写入到MapReduce作业的下一个阶段(通常是Reducer阶段)进行进一步处理。

3.3.  实现Reduce阶段

图3-3 WeatherReducer包

这个WeatherReducer类是一个Hadoop MapReduce的Reducer实现,专门用于处理从Mapper阶段接收到的天气气温数据。它继承自Reducer<Text, Text, Text, Text>,意味着它接收的输入键(Key)和值(Value)类型都是Text,并且它输出的键和值类型也都是Text。这个Reducer实现了以下功能:

  1. 初始化统计变量:在reduce方法开始时,Reducer初始化了四个变量来跟踪气温的统计信息:minTemp(最低气温,初始化为Integer.MAX_VALUE),maxTemp(最高气温,初始化为Integer.MIN_VALUE),totalTemp(气温总和,初始化为0),以及count(气温值的数量,初始化为0)。
  2. 遍历气温值:对于与给定键(日期)相关联的所有气温值(Iterable<Text> values),Reducer遍历它们,将每个值从Text类型转换为int类型的气温值。
  3. 计算统计信息:在遍历过程中,Reducer更新最低气温、最高气温、气温总和以及气温值的数量。
  4. 计算平均气温:一旦遍历完成,Reducer使用气温总和除以气温值的数量来计算平均气温。
  5. 格式化结果:Reducer将最低气温、最高气温和平均气温格式化为一个字符串,其中气温值之间用制表符(\t)分隔,并且平均气温保留两位小数。
  6. 输出结果:最后,Reducer将格式化后的结果字符串作为值,与当前的键(日期)一起输出。这个键值对被写入到MapReduce作业的输出中,通常是一个HDFS文件或本地文件系统中。

3.4. 实现驱动类

图3-4 WeatherDriver包

这个WeatherDriver类是一个Hadoop MapReduce作业的驱动程序,它负责配置和启动整个作业。具体来说,它实现了以下功能:

  1. 日期格式化:首先,它创建了一个DateFormat对象(使用SimpleDateFormat),用于将当前日期和时间格式化为字符串。这个格式化后的日期和时间字符串稍后将用于为输出目录命名。
  2. 配置作业:接着,它创建了一个Configuration对象,这是Hadoop配置的核心,用于设置作业的各种参数。然后,它基于这个配置创建了一个Job对象,这是MapReduce作业的代表。
  3. 设置作业属性:
    • 作业名称:通过job.setJobName("Weather Analysis")设置了作业的名称为“Weather Analysis”。
    • JAR文件:通过job.setJarByClass(WeatherDriver.class)指定了包含作业所需的类和资源的JAR文件。Hadoop将基于这个JAR文件来运行作业。
    • Mapper类:通过job.setMapperClass(WeatherMapper.class)指定了Mapper类为WeatherMapper。
    • Reducer类:通过job.setReducerClass(WeatherReducer.class)指定了Reducer类为WeatherReducer。
    • 输出键值类型:通过job.setOutputKeyClass(Text.class)和job.setOutputValueClass(Text.class)指定了输出键和值的类型为Text。
  4. 设置输入输出路径:
    • 输入路径:通过FileInputFormat.setInputPaths(job, new Path("/usr/hadoop/in"))设置了输入数据的HDFS路径为/usr/hadoop/in。
    • 输出路径:通过FileOutputFormat.setOutputPath(job, new Path("/usr/hadoop/temperature/" + date))设置了输出数据的HDFS路径。这个路径是基于前面格式化的当前日期和时间字符串动态生成的,确保了每次运行作业时输出目录都是唯一的。
  5. 启动作业:最后,通过调用job.waitForCompletion(true)启动作业,并等待它完成。这个调用会阻塞当前线程,直到作业完成或失败。如果作业成功完成,waitForCompletion方法将返回true;如果作业失败,它将返回false。
  6. 退出程序:根据作业的完成状态,程序将通过System.exit(result ? 0 : 1)正常退出(如果作业成功)或异常退出(如果作业失败)。

3.5将 MapReduce 程序封装jar文件

在IDEA的右侧单击“Maven”,在弹出的Maven窗口依次单击“HadoopDataReport” →“Lifecycle”,在 Lifecycle 折叠框中双击“package”选项将Maven项目HadoopDataReport 封装为jar文件。将包含HadoopDataReport项目依赖的jar文件提交到YARN集群执行, 为了便于后续使用,这里将jar文件重命名为WeatherMapReduce。

图3-6 生成jar包

 上传jar 文件 将WeatherMapReduce.jar 文件上传到虚拟机Hadoop1的/export/data 目录。测试jar 文件 确保Hadoop集群处于启动状态下运行WeatherMapReduce.jar,在虚拟机Hadoop1的/export/data目录 执行如下命令。

运行jar包,具体命令如下图所示

图3-5 运行WeatherMapReduce.jar

上述命令执行完成后,会根据MapReduce程序在虚拟机Hadoop1执行时的系统日期和 时间,在HDFS的/usr/hadoop/temperature 目录下生成对应的目录,该目录中存放了MapReduce程序 的处理结果,查看具体结果如下图所示

图3-7 查看具体结果

4数据仓库的设计与开发

4.1 数据库设计

数据仓库开发主要是通过Hive构建数据仓库,通过数据仓库中的表来存储与需求分析 相关的数据,

针对此次网站流量日志数据分析系统,需要在Hive数据仓库中创建数据仓库层对应的总表data明细表 temperature、业务表 daily_max_temp 和 业务表 daily_min_temp和daily_avg_temp,具体介绍如下。

总表data存在于hdfs上,其作用是存储元数据,提供通过MapReduce程序进行数据预处理。如图4.1所示

字段

数据类型

描述

observation_year

INT

观测年份

observation_month

INT

观测月份

observation_day

INT

观测日期

observation_hour

INT

观测小时

air_temperature

FLOAT

空气温度

dew_point

FLOAT

露点温度

sea_level_pressure

FLOAT

海平面压力

wind_direction

INT

风向

wind_speed

FLOAT

风速

sky_condition

INT

天空状况

图4-1 data总表的结构

这里我只用前5个字段,任务是统计每日最高温度、最低温度、平均温度,

明细表temperature存在于数据仓库层的明细层,其做用是存储通过MapReduce程序进 行数据预处理之后的数据,

数据类型

t_date

STRING

记录温度的日期

t_max

DOUBLE   

当日最高温度

t_min

DOUBLE

当日最低温度

t_avg

DOUBLE

当日平均温度

图4-2temperature明细表的结构

4.2 数据库的创建准备

CREATE TABLE temperature (

t_date STRING,

 t_max DOUBLE,

t_min DOUBLE,

t_avg DOUBLE  )

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';


创建明细表HIVE.temperature

创建业务表(每日最高温度分析),基于总表temperature表统计数据,创建业务表daily_max_temp。

具体sql语句如下图4-3所示

图4-3 hive业务表创建

基于总表temperature表统计数据,创建业务表daily_avg_temp。

图4-4 hive业务表创建

基于总表temperature表统计数据,创建业务表daily_min_temp,具体操作语句如下如所示。

图4-5 hive业务表创建

5. 数据分析模块的设计与开发

根据前期准备,weather 是数据库名称,而 temperature 是已经存在于该数据库中的一个表,用于存储温度数据。数据仓库构建完成后,户便可以使用HiveQL语句进行数据分析。本项目主要针对每日最高温度分析、每日最低温度分析和每日平均温度分析这三个需求进行分析,

5.1. 每日最高温度分析

基于总表temperature表统计数据,并将统计结果插入到业务表daily_max_temp

图5-1 统计结果插入到业务表daily_max_temp

最后,查询业务表中的数据以验证结果,具体查询结果如下图所示

图5-2 验证结果

5.2每日平均温度分析

基于总表temperature表统计数据,并将统计结果插入到业务表daily_avg_temp,具体命令如图5-3所示

图5-3 统计结果插入到业务表daily_avg _temp

显示导入成功,查看询业务表中的前五条数据以验证结果,具体如下图所示

图5-4 验证结果

5.3每日最低温度分析

基于总表temperature表统计数据,并将统计结果插入到业务表daily_min_temp,具体命令如图5-5所示

图5-5 验证结果

显示导入成功,查看询业务表中的前五条数据以验证结果,具体数据如图5-6所示

图5-6验证结果

6. 数据导出模块的设计与开发

Mysq建表建库准备工作,具体操作语句如下如所示。

图6-1MYSQL创表

为了方便后续进行数据可视化,使用Sqoop将Hive数据仓库中业务表的数据导出到MySQL的数据表temperature,具体操作步骤如下。如图示

图6-2 6-3 Sqoop导出数据操作

在MySQL中执行SELECT * FROM weather.temperature; 查询数据表统计结果如下

图6-4 SELECT * FROM weather.temperature; 查询数据表统计结果如下

报表展示模块的设计与开发

数据可视化是指将数据或信息表示为图形中的可视对象来传达数据或信息的技术,目的 是清晰有效地向用户传达信息,以便用户可以轻松了解数据或信息中的复杂关系。用户可以通过图形中的可视对象直观地看到数据分析结果,从而更容易理解业务变化趋势或发现新的 业务模式。数据可视化是数据分析中的一个重要步骤。本项目使用FineBI 工具实现数据可视化。

  1. 7.1 每日平均温度数据图

    2024年每日平均气温数据可视化组件如下图所示

    图7-1 每日平均温度数据可视化组件

    7.2每日最高温度数据图

    2024年每日最高气温数据可视化组件如下图所示

    图7-2 每日最高温度数据可视化组件

    1. 每日最低温度数据图
  2. 2024年每日最低气温数据可视化组件如下图所示

    图7-3 每日最低温度数据可视化组件

    1. 热力图
  3. 2024年热力数据可视化组件如下图所示

    图7-4 热力图数据可视化组件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.youkuaiyun.com/qq_39410381/article/details/106367411 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                 原文链接:https://blog.youkuaiyun.com/qq_39410381/article/details/106367411

以上仅为二创,修改了mapreduce代码部分。

### 回答1: 基于Hadoop气象数据分析是利用Hadoop平台进行大规模、高效、并行处理气象数据的一种方法。Hadoop是一个开源的分布式计算框架,可以处理大型数据集并提供高可靠性和高吞吐量。在气象数据分析中,Hadoop可以提供以下优势: 1. 处理大量数据:气象数据通常非常庞大,包含大量的观测数据、模型输出和卫星遥感数据等。Hadoop可以将这些数据分割成小块,并在集群中并行处理,以加速数据处理速度。 2. 并行处理:Hadoop的并行处理能力使得气象数据可以同时在多个节点上进行处理,从而节省时间和资源。例如,可以同时计算多个气象变量的平均值或统计数据。 3. 容错性:Hadoop具有高度的容错性,即使某个节点出现故障,也不会影响整个计算任务的进行。这对于气象数据分析来说是至关重要的,因为数据集通常非常庞大,故障可能会导致数据处理的中断和重复。 4. 扩展性:Hadoop的集群可以根据需要进行扩展,以处理不断增长的气象数据量。这使得气象数据分析能够随着数据规模的增加而不断提高处理能力。 5. 数据挖掘和机器学习:Hadoop可以与其他数据挖掘和机器学习工具集成,例如Apache Spark和TensorFlow等,以便更深入地分析气象数据并发现隐藏的规律。 综上所述,基于Hadoop气象数据分析能够处理大量数据、并行处理、具备高度容错性和可扩展性,并可以结合其他数据挖掘和机器学习技术,为气象学研究和应用提供强大的支持。 ### 回答2: 基于Hadoop气象数据分析是指利用Hadoop平台进行气象数据的存储、处理和分析。Hadoop是一个开源的高性能分布式计算平台,具有良好的扩展性和容错性,非常适合处理大规模的数据集。气象数据分析的目的是从大量的气象观测数据中提取有价值的信息,为气象预测、气候研究以及灾害预警等提供支持。 首先,对于大规模的气象数据,Hadoop提供了分布式文件系统HDFS,能够高效地存储和管理数据。气象观测数据可以通过Hadoop集群的数据节点进行分布式存储,保证数据的可扩展性和冗余备份,防止数据丢失。 其次,Hadoop的计算框架MapReduce可以用于并行处理气象数据。通过编写MapReduce程序,可以对海量的气象数据进行分布式计算,包括数据过滤、清洗、聚合、统计等。例如,可以使用MapReduce计算某个时间段内的平均气温、最高风速等统计信息,以及不同地区的降水量、温度分布等情况。 另外,Hadoop生态系统中的其他工具也可以用于气象数据分析。例如,使用Hive可以进行数据的查询和分析,使用Pig可以进行数据的清洗和转换,使用Spark可以进行复杂的数据处理和机器学习算法。 基于Hadoop气象数据分析具有以下优势:首先,能够高效地处理大规模的气象数据,提高数据分析的效率;其次,具有良好的扩展性和容错性,可以应对数据量的快速增长和硬件故障;此外,Hadoop的开源性和社区支持,为气象数据的处理和分析提供了丰富的工具和算法。 综上所述,基于Hadoop气象数据分析可以提高对大规模气象数据的处理和分析能力,为气象预测和气候研究等领域提供有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值