Hadoop分布式计算框架(MapReduce)——案例实践:气象大数据离线分析
目录
(1)项目需求
(2)数据格式
(3)实现思路
(4)项目开发
(1)项目需求
现在有一份来自美国国家海洋和大气管理局的数据集,里面包含近30年每个气象站、每小时的天气预报数据,每个报告的文件大小大约15M。一共有263个气象站,每个报告文件的名字包含气象站ID,每条记录包含气温、风向、天气状况等多个字段信息。现在要求统计美国各气象站30年平均气温。
(2)数据格式
天气预报每行数据的每个字段都是定长的,完整数据格式如下。
数据格式由Year(年)、Month(月)、Day(日)、Hour(时)、Temperature(气温)、Dew(湿度)、Pressure(气压)、Wind dir.(风向)、Wind speed(风速)、Sky Cond.(天气状况)、Rain 1h(每小时降雨量)、Rain 6h(每6小时降雨量)组成。
(3)实现思路
我们的目标是统计近30年每个气象站的平均气温,由此可以设计一个MapReduce如下所示:
Map = {key = weather station id, value = temperature}
Reduce = {key = weather station id, value = mean(temperature)}
首先调用mapper的map()函数提取气象站id作为key,提取气温值作为value,然后调用reducer的reduce()函数对相同气象站的所有气温求平均值。
(4)项目开发
打开IDEA的bigdata项目,开发MapReduce分布式应用程序,统计美国各气象站近30年的平均气温。
(1)引入Hadoop依赖
由于开发MapReduce程序需要依赖Hadoop客户端,所以需要在项目的pom.xml文件中引入Hadoop的相关依赖,添加如下内容:
org.apache.hadoop> /home/hadoop/shell/logs/weather.log 2>&1
chmod u+x weatherMR.sh
⑦提交MapReduce作业
到该脚本目录下,执行weatherMR.sh脚本提交MapReduce作业
./weatherMR.sh
⑧查看运行结果
使用HDFS命令查看美国各气象站近30年的平均气温:
hdfs dfs -cat /weather/out/part-r-00000





