任务12:使用Hadoop Streaming解压NCDC天气原始数据

news2024/9/24 17:13:57

任务描述

知识点

  • NCDC原始的气象数据上传到HDFS
  • MapReduce程序处理NCDC原始数据

重  点

  • 熟练使用HDFS基础命令
  • 查看HDFS文件块的分布情况
  • 掌握Linux系统Shell脚本的编写
  • 熟练使用MapReduce程序解压缩文件
  • 使用MapReduce程序处理NCDC气象数据

内  容

  • NCDC气象数据上传至HDFS
  • 检查HDFS文件块的分布情况
  • 编写Linux Shell脚本生成input文件
  • 编写Shell脚本处理原始的NCDC数据文件,并将其存储在HDFS中
  • 使用MapReduce程序运行Shell脚本,处理NCDC数据

任务指导

以上一步中下载的2021和2022两年的数据为例。学生参照下面的步骤可以自行处理其他年份的数据。

1. NCDC气象数据

1)原始的NCDC气象数(noaa/isd-ite数据)据实际是一组经过gzip压缩的gz文件。每个年份的所有气象站的数据单独放在一个文件中。

2)每个gzip压缩文件中包含,描述某一气象站在一年中的所有天气数据记录。

3)气象要素包括:气温、气压、露点、风向风速、云量、降水量等。

  • 例如:

  • 各字段的含义如下:
时间温度露点温度气压风向风速云量1小时雨量6小时雨量
202101010080-941028550601-9999-9999

2. NCDC气象数据上传过程

  • 准备数据集
  • 在HDFS上新建文件夹用于存放气象数据
  • 将本地存储NCDC气象数据上传到HDFS中
  • 查看文件块的分布情况

3. Hadoop处理NCDC原始数据

在Hadoop集成环境中处理这些原理数据,气象站数以万计,整个数据集实际是一组经过gzip压缩的gz文件,每个年份的所有气象站的数据单独放在一个文件中,所以在本例中需要将每个年度的所有气象站数据(.gz文件)解压缩到以年份命名的文件夹中。上述操作可由一个MapReduce程序来完成,以充分利用其并行处理能力的优势。下面具体演示这个程序。

4. 处理NCDC原始数据实现过程

1)新建generate_input_list.sh脚本,生成MapReduce的input文件

  • input文件包含要处理的文件列表
  • 为generate_input_list.sh添加执行能力
  • 运行generate_input_list.sh脚本,生成包含需要处理的文件夹列表的ncdc_files.txt文件

2)利用bash脚本处理原始的NCDC数据文件,并将其存储在HDFS中

  • 新建load_ncdc_map.sh文件
  • 给load_ncdc_map.sh添加运行权限
  • 使用hadoop-streaming作业运行上面的bash脚本
  • 程序运行完成,在HDFS的/GSOD_ALL目录下生成对应年份目录

  • 在每个目录下,包含该年份所有气象站的数据文件

任务实现

以上一个任务中下载的2021和2022两年的数据为例。学生参照下面的步骤可以自行处理其他年份的数据。

1. 将NCDC原始的气象数据上传到HDFS上,步骤如下(在master节点上):

1)将下载到本地的NCDC气象数(noaa/isd-ite数据)文件上传到master节点服务器上。(当前项目环境已在对应路径位置提供相应数据,已上传到master节点服务器。)

2)将master节点(NameNode所在的节点)服务器上的本地文件上传到Hadoop集群的HDFS中。

  • 在HDFS上新建 GSOD 文件夹保存所有原始气象数据文件
# hdfs  dfs  -mkdir  /GSOD
  • 在HDFS上新建 GSOD_ALL文件夹来保存重新处理后的气象数据文件
# hdfs  dfs  -mkdir  /GSOD_ALL
  • 查看文件夹是否建立
# hdfs  dfs  -ls  /

输出结果,如下所示:

  • 将master节点(NameNode所在的节点)服务器上本地的ncdc文件夹里的气象数据文件上传到HDFS
# hdfs dfs -put /usr/local/data/ncdc/isd-lite/* /GSOD
  • 查看是否已经上传到HDFS
# hdfs dfs -ls /GSOD

输出结果,如下所示:

  • 可以通过如下命令查看文件块的分布情况
# hdfs fsck /GSOD -files -blocks -racks

输出结果类似:

0.   BP-1861083552-192.168.137.10-1420535325500:blk_1073742813_2006 len=88842240   repl=3 [/default-rack/192.168.137.13:50010,   /default-rack/192.168.137.12:50010, /default-rack/192.168.137.11:50010]

...   略 ...

Status: HEALTHY
Total size:    92855723 B
Total dirs:    3
Total files:   2083
Total symlinks:                0
Total blocks (validated):      2083 (avg. block size 44577 B)
Minimally replicated blocks:   2083 (100.0 %)
Over-replicated blocks:        0 (0.0 %)
Under-replicated blocks:       0 (0.0 %)
Mis-replicated blocks:         0 (0.0 %)
Default replication factor:    2
Average block replication:     2.0
Corrupt blocks:                0
Missing replicas:              0 (0.0 %)
Number of data-nodes:          2
Number of racks:               1
FSCK ended at Mon Mar 13 15:38:44 CST 2023 in 53 milliseconds

参数解释:

参数

详细信息

status

代表这次hdfs上block检测的结果

Total size

代表检测目录下文件总大小

Total dirs

代表检测的目录下总共有多少个目录

Total files

代表检测的目录下总共有多少文件

Total symlinks

代表检测的目录下有多少个符号连接

Total blocks(validated)

代表检测的目录下有多少个block块是有效的

Minimally replicated blocks

代表拷贝的最小block块数

Over-replicated blocks

指的是副本数大于指定副本数的block数量

Under-replicated blocks

指的是副本数小于指定副本数的block数量

Mis-replicated blocks

指丢失的block块数量

Default replication factor

1 指默认的副本数是1份(自身一份)

Missing replicas

丢失的副本数

Number of data-nodes

有多少个节点

Number of racks

有多少个机架

2. Hadoop处理NCDC原始数据

在Hadoop集成环境中处理这些原理数据,气象站数以万计,整个数据集实际是一组经过gzip压缩的gz文件,每个年份的所有气象站的数据单独放在一个文件中,所以在本例中需要将每个年度的所有气象站数据(.gz文件)解压缩到以年份命名的文件夹中。上述操作可由一个MapReduce程序来完成,以充分利用其并行处理能力的优势。下面具体演示这个程序。

该程序只有一个map函数,无reduce函数,因为map函数可并行处理所有文件操作,无需整合步骤。这项处理任务能够用一个Unix脚本进行处理,因而在这里使用Hadoop面向MapReduce的Streaming接口比较合适。

1)新建generate_input_list.sh脚本,用于生成一个MapReduce的input文件,该文件包含要处理的文件夹列表

  • 首先创建/home/shell目录作为shell脚本工作目录,然后通过cd命令切换到工作目录
# mkdir /home/shell
# cd /home/shell
  • 新建一个generate_input_list.sh来生成MapReduce的input文件,代码如下:
#!/bin/bash
a=$1
if [ -e "ncdc_files.txt" ]
then
        rm ncdc_files.txt
        hdfs dfs -rm /ncdc_file.txt
fi
while [ $a -le $2 ]
do
        filename="/GSOD/${a}/"
        echo -e "$filename" >> ncdc_files.txt
        a=`expr $a + 1`
done
hdfs dfs -put ncdc_files.txt /
  • 给generate_input_list.sh添加执行能力,命令如下:
# chmod +x generate_input_list.sh
  • 生成在本例中包含需要处理的文件夹列表的ncdc_files.txt文件,命令如下:

注意:本次仅演示2021-2022年气象数据,参照下面的步骤可以自行处理其他年份的数据

# ./generate_input_list.sh 2021 2022
  • 查看ncdc_files.txt文件,命令如下:
# more ncdc_files.txt 

输出结果,如下所示:

2)利用bash脚本处理原始的NCDC数据文件,并将其存储在HDFS中

创建load_ncdc_map.sh使其可以在MapReduce的Streaming上正常运行。在MapReduce中将读取ncdc_files.txt作为入参,读入的格式是NLineInputFormat。

  • 在/home/shell目录下新建一个load_ncdc_map.sh文件,代码如下所示:
#!/bin/bash
read offset hdfs_file
echo -e "$offset\t$hdfs_file"
# RetrievefilefromHDFStolocaldisk
echo "reporter:status:Retrieving" $hdfs_file >&2
/home/hadoop/hadoop-2.9.2/bin/hdfs dfs -get $hdfs_file .
#Createlocaldirectory
target=`basename $hdfs_file`
#Unzipeachstationfileandconcatintoonefile
echo "reporter:status:Un-gzipping $target" >&2
for file in $target/*
do
        gunzip $file
        echo "reporter:status:Processed$file" >&2
done
#PutgzippedversionintoHDFS
echo "report:status:file $target and putting in HDFS" >&2
rm -rf $target/*.gz
/home/hadoop/hadoop-2.9.2/bin/hdfs dfs -put $target/ /GSOD_ALL/
rm -rf $target

文件说明:

处理过程简单说来,首先将HDFS数据下载到本地目录

对每个年度中的气象数据(.gz文件)进行解压缩;

将解压好的文件重新上传到HDFS的/GSOD_ALL目录中;

状态消息输出到“标准错误”(以reporter:status为前缀),输出内容为MapReduce的状态更新,说明该Hadoop脚本正在运行并未挂起。

  • 给load_ncdc_map.sh添加运行权限。
# chmod +x load_ncdc_map.sh
  • 通过如下命令查看结果是否正确。
# ll load_ncdc_map.sh

输出结果,如下所示:

3)使用hadoop-streaming作业运行上面的bash脚本

  • 运行Streaming作业的脚本结果如下:
# hadoop jar /home/hadoop/hadoop-2.9.2/share/hadoop/tools/lib/hadoop-streaming-2.9.2.jar \
-D mapreduce.job.reduces=0 \
-D mapreduce.map.speculative=false \
-D mapreduce.task.timeout=12000000 \
-inputformat org.apache.hadoop.mapred.lib.NLineInputFormat \
-input /ncdc_files.txt \
-output /output/1 \
-mapper /home/shell/load_ncdc_map.sh \
-file /home/shell/load_ncdc_map.sh

这是一个“只有map”的作业,因为reduce任务数为0。 以上脚本还关闭了推测执行(speculative execution),因此重复的任务不会写相同的文件。任务超时参数被设置为一个比较大的值,使得Hadoop不会杀掉那些运行时间较长的任务(例如在解档文件、将文件复制到HDFS或者当进展状态未被报告时)。

  • 作业提交后屏幕显示如下:     

  • 提示运行完毕后使用如下命令查看目标文件是否生成。
# hdfs dfs -ls /GSOD_ALL

输出结果,如下所示:

  • 在每个文件夹下是解压后的数据文件(以2021年前10个文件为例进行展示)。
# hadoop fs -ls /GSOD_ALL/2021 | head -n 10

  • 运行命令查看目录(可选步骤)。
# hadoop fs -ls /output/1

  • 使用cat命令查看文件内容(可选步骤)。
# hadoop fs -cat /output/1/part-00000
# hadoop fs -cat /output/1/part-00001

输出结果,如下所示:

在结果中,“12”表示输入行的offset,“/GSOD/2022/”是数据路径。

上一个任务下一个任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1387959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024.1.15 网络编程 作业

思维导图 练习题 1.实现TCP服务器和客户端之间的通信 server.c #include <myhead.h>int main(int argc, char const *argv[]) {//创建套接字int sfd socket(AF_INET, SOCK_STREAM, 0);//端口复用&#xff0c;作用&#xff1a;关闭服务器后再启动不会等待int reuse 1…

谷粒商城篇章8 ---- P236-P247 ---- 购物车【分布式高级篇五】

目录 1 环境搭建 1.1 新建购物车服务模块gulimall-cart 1.2 购物车服务相关配置 1.2.1 pom.xml 1.2.2 yml配置 1.2.2.1 application.yml配置 1.2.2.2 bootstrap.yml配置 1.2.3 主类 1.3 SwitchHosts增加配置 1.4 网关配置 1.5 整合SpringSession 1.5.1 session数据…

RPA与通知机器人的完美结合

写在前面 在现代快节奏的工作环境中&#xff0c;我们经常会面临多个任务同时进行的情况&#xff0c;你还在为时间不够用、忙碌而惆怅吗&#xff1f;你还在为时刻盯着电脑流程而烦恼吗&#xff1f;你还在为及时收不到自己的自动化任务进度而焦躁吗&#xff1f;别担心&#xff0…

Elasticsearch:聊天机器人教程(二)

这是继上一篇文章 “Elasticsearch&#xff1a;聊天机器人教程&#xff08;一&#xff09;”的续篇。本教程的这一部分讨论聊天机器人实现中最有趣的方面&#xff0c;以帮助你理解它并对其进行自定义。 数据摄入 在此应用程序中&#xff0c;所有示例文档的摄取都是通过 flask …

教你用五步让千年的兵马俑跳上现代的科目三?

以下是一张我上月去西安拍的兵马俑照片&#xff1a; 使用通义千问&#xff0c;5步就能它舞动起来&#xff0c;跳上现在流行的“科目三”舞蹈。 千年兵马俑跳上科目三 全民舞王 第1步 打开通义千问App&#xff0c;我使用的是华为手机&#xff0c;苹果版的没试&#xff1b; 在…

编译 FastDFS 时报错 fatal error: sf/sf_global.h: No such file or directory 解决办法

编译 FastDFS 时&#xff0c;报错如下 gcc -Wall -D_FILE_OFFSET_BITS64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I../common -I/usr/local/include In file included from ../common/fdfs_global.c:21:0: ../common/fdf…

【控制篇 / 分流】(7.4) ❀ 01. 对指定IP网段访问进行分流 ❀ FortiGate 防火墙

【简介】公司有两条宽带&#xff0c;一条ADSL拨号用来上网&#xff0c;一条移动SDWAN&#xff0c;已经连通总部内网服务器&#xff0c;领导要求&#xff0c;只有访问公司服务器IP时走移动SDWAN&#xff0c;其它访问都走ADSL拨号&#xff0c;如果你是管理员&#xff0c;你知道有…

pod 控制器

pod 控制器&#xff1a; pv pvc 动态pv pod控制器&#xff1a;工作负载&#xff0c;workload&#xff0c;用于管理pod的中间层&#xff0c;确保pod资源符号预期的状态。 预期状态&#xff1a; 1&#xff0c;副本数 2&#xff0c;容器的重启策略 3&#xff0c;镜像拉取策略…

【软件测试】前端性能测试工具原理

不同于后端性能测试知识的琐碎、独立&#xff0c;这篇文章为你介绍前端性能测试工具WebPagetest&#xff0c;以一个具体网站为例&#xff0c;和你分析WebPagetest的用法&#xff0c;以及前端性能相关的主要概念与指标。 WebPagetest功能简介 WebPagetest&#xff0c;是前端性…

STM32--7针0.96寸OLED屏幕显示(4线SPI)

本文介绍基于STM32F103C8T60.96寸OLED&#xff08;7针&#xff09;的显示&#xff08;完整程序代码见文末链接&#xff09; 一、简介 OLED&#xff0c;即有机发光二极管&#xff08; Organic Light Emitting Diode&#xff09;。 OLED 由于同时具备自发光&#xff0c;不需背光…

【RL】(task1)绪论、马尔科夫过程、动态规划、DQN(更新中)

note 文章目录 note一、马尔科夫过程二、动态规划DQN算法时间安排Reference 一、马尔科夫过程 递归结构形式的贝尔曼方程计算给定状态下的预期回报&#xff0c;这样的方式使得用逐步迭代的方法就能逼近真实的状态/行动值。 有了Bellman equation就可以计算价值函数了马尔科夫过…

day2·算法-快乐数-有效三角形个数

今天又来更新啦&#xff0c;准备蓝桥杯的小伙伴可以和我一起来刷题&#xff0c;建议大家先看题&#xff0c;整理出思路&#xff0c;再看如何用简单的写法将思路构建出来&#xff0c;然后优化细节&#xff0c;找到解决某些例外出现的方法&#xff0c;从而成功解答这道题。 快乐…

ucloud轻量云(wordpress)配置ssl

ucloud 轻量云(wordpress)配置ssl 1、上传ssl证书到/usr/local/software/apache/conf&#xff0c;这里的文件名和内容与ucloud控制台下载下来的文件名和内容保持一致 2、修改httpd.conf文件 vim /usr/local/software/apache/conf/httpd.conf 找到下面两行&#xff0c;去掉注…

SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用

四、Database MetaData 与 SQL Express Language 的使用 MetaData对象用于描述表结构&#xff0c;SQL Express Language是DBAPI SQL的统一封装器。MetaData 与SQL Express 语句可以在Core层使用&#xff0c;ORM层基于MetaData, SQL Express基础上做了进一步抽象。本章将介绍在…

前端框架前置学习Node.js(2)npm使用,Node.js总结

npm - 软件包管理器 定义 npm是Node.js标准的软件包管理器 npm仓库中包含大量软件包,使其成为世界上最大的单一语言代码仓,并且可以确定几乎可用于一切的软件包 最初是为了下载和管理Node.js包依赖的方式,但其现在已成为前端JavaScript中使用的工具 使用: 1.初始化清单文…

VC++读取ini文件示例2

之前学习过ini文件读写&#xff1b;继续熟悉&#xff1b; CString str1;UINT m1 0;UINT m2 0;TCHAR p1[32];m1 GetPrivateProfileString(_T("mymoney1"), _T("moneyname1"), _T("空"), p1, sizeof(p1), _T("E:\\VCPrj\\VC2015\\cattest\…

免费的域名要不要?

前言 eu.org的免费域名相比于其他免费域名注册服务&#xff0c;eu.org的域名后缀更加独特。同时&#xff0c;eu.org的域名注册也比较简单&#xff0c;只需要填写一些基本信息&#xff0c;就可以获得自己的免费域名。 博客地址 免费的域名要不要&#xff1f;-雪饼前言 eu.org…

FPGA之LUT

由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流FPGA都采用了基于SRAM工艺的查找表结构。LUT本质上就是一个RAM.它把数据事先写入RAM后,每当输入一个信号就…

【QML COOK】- 009-组件(Components)

组件对于QML来说就如同C的类一样。可以用同一个组件创建多个对象。 组件有两种定义方式&#xff1a; 用独立的.qml文件定义组件在.qml文件中用Component对象定义组件 1. 创建项目&#xff0c;新建文件IndependentComponent.qml import QtQuickRectangle {id : rootText {id…

2.3 数据链路层03

2.3 数据链路层03 2.3.7 以太网交换机 1、以太网交换机的基本功能 以太网交换机是基于以太网传输数据的交换机&#xff0c;以太网交换机通常都有多个接口&#xff0c;每个接口都可以直接与一台主机或另一个以太网交换机相连&#xff0c;一般都工作在全双工方式。 以太网交换…