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

任务描述

知识点

  • 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.mfbz.cn/a/323806.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Demo: 给图片添加自定义水印并下载

给图片添加自定义水印并下载 <template><div class"wrap"><div class"optea"><p>水印文字</p><el-input v-model"watermarkOptions.text" placeholder"请输入水印内容"></el-input><p&g…

LInux初学之路linux的磁盘分区/远程控制/以及关闭图形界面/查看个人身份

虚拟机磁盘分配 hostname -I 查看ip地址 ssh root虚拟就ip 远程连接 win10之后才有 远程控制重新启动 reboot xshell 使用&#xff08;个人和家庭版 免费去官方下载&#xff09; init 3 关闭界面 减小内存使用空间 init 5 回复图形界面 runlevel显示的是状态 此时和上…

重学Java 6 流程控制语句

我与我&#xff0c;至死不渝 ——24.1.15 模块重点&#xff1a; ①会使用Scanner和Random ②会使用switch以及知道case的穿透性 ③会使用if ④会使用for循环&#xff0c;while循环&#xff0c;嵌套循环 一、键盘录入_Scanner 1.概述&#xff1a;是Java定义好的一个类 2.作用&am…

前端学习路径

菜鸟感觉很多人不太知道菜鸟写的博客是一个可以跟着学习、一起深入理解的过程&#xff0c;其中包括了菜鸟从刚开始学习到后面重新学习&#xff0c;再到后面进入学框架等一系列学习过程、知识和感悟&#xff0c;所以菜鸟把自己的博客整理成一个目录提取出来&#xff0c;好让读者…

kafka系列(二)

本章承接kafka一内容&#xff0c;文章在本人博客主页都有&#xff0c;可以自行点击浏览。 幂等性 请求执行多次&#xff0c;但执行的结果是一致的。 如果&#xff0c;某个系统是不具备幂等性的&#xff0c;如果用户重复提交了某个表格&#xff0c;就可能会造成不良影响。例如…

OpenHarmony——Linux之IR驱动

Linux之IR驱动 背景 在光谱中波长自760nm至400um的电磁波称为红外线&#xff0c;它是一种不可见光。红外遥控成本很低&#xff0c;以前广泛应用在电视&#xff0c;空调等电器的控制上面&#xff0c;现在随着蓝牙遥控器慢慢普及&#xff0c;红外遥控越来越少&#xff0c;但在某…

确定性网络技术怎样实现网络的可靠性?

确定性网络技术通过采用特定的协议、机制和策略&#xff0c;有助于提高网络的可靠性。本文通过一些关键的方面&#xff0c;来说明确定性网络技术如何实现这一目标。 时钟同步机制 时钟同步机制是确定性网络中的核心角色。为了实现高度可靠的通信&#xff0c;需要采用先进的时钟…

运筹说 第65期 | 动态规划的基本概念和基本原理

20世纪50年代初&#xff0c;美国数学家R. Bellman 等人在解决多阶段决策优化问题时提出了一种高效的求解方法——动态规划&#xff08;Dynamic Programming&#xff09;&#xff0c;该方法基于多阶段决策优化问题的特点&#xff0c;把多阶段问题转换为一系列互相联系的单阶段问…

档案数字化加工是如何利用档案的

档案数字化加工是通过将实体档案转化为电子形式&#xff0c;利用数字化技术对档案进行处理和管理。这样做可以带来以下几个方面的利益&#xff1a; 1. 提高档案的可访问性&#xff1a;数字化档案可以轻松存储在电脑或云存储中&#xff0c;可以随时随地通过计算机或移动设备访问…

HNU-算法设计与分析-实验3

算法设计与分析实验3 计科210X 甘晴void 202108010XXX 目录 文章目录 算法设计与分析<br>实验31 用Dijkstra贪心算法求解单源最短路径问题问题重述证明模板&#xff1a;Dijkstra算法代码验证算法分析 1【扩展】 使用堆优化的Dijkstra原因代码算法分析验证 2 回溯法求解…

[docker] Compose 简介

文章目录 Compose 简介Compose 安装1、使用二进制安装包安装2、用pip安装 使用1、准备2、创建 Dockerfile 文件3、创建 docker-compose.yml4、使用 Compose 命令构建和运行您的应用 yml 配置指令参考versionbuildcap_add&#xff0c;cap_dropcgroup_parentcommandcontainer_nam…

设计模式⑥ :访问数据结构

一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》&#xff08;【日】结城浩 著&#xff09;。该系列文章可随意转载。 …

《C++大学教程》4.34阶乘

题目&#xff1a; 对一个非负整数n来说&#xff0c;它的阶乘可以写成 n! (读作“n的阶乘”)&#xff0c;其计算公式定义如下&#xff1a; n! n x (n-1) x (n-2)x......x1&#xff08;对于大于1的 n &#xff09; 和 n! 1 ( 对于等于0或者等于1的n ) 例如&#xff0c;5&…

【SpringMVC】—— 如何配置使用SpringMVC(详细步骤)

目录 引言 使用 1、新建模块 2、导入坐标 3、创建SpringMVC控制器类 4、初始化SpringMVC环境 5、初始化Servlet容器&#xff0c;加载SpringMVC环境 6、配置运行 引言 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架&#xff0c;SpringMVC是表现层(web层)的框架,也…

Java开发笔记

一、参数校验 1、校验json字符串是否符合规范 &#xff08;1&#xff09;业务场景&#xff1a;接收前端传输过来的json串&#xff0c;需要将其写入数据库&#xff0c;写入之前需要校验其是否能够转换成对应实体类&#xff0c;以便后续从数据库读取   &#xff08;2&#xff0…

条件控制生成---相关论文集合

1. IP-Adapter 论文地址 解决问题&#xff1a; 如何将图片作为prompt输入网络&#xff0c;并无需更改开源模型参数 解决思路&#xff1a; 新增一个cross-attention layers&#xff0c;结果与text prompt的cross-attention layers结果相加后输入网络&#xff0c;只需要训练Wk, …

细说JavaScript对象(JavaScript对象详解)

在JavaScript中对象作为数据类型之一&#xff0c;它的数据结构区别于其余5中数据类型&#xff0c;从数据结构角度看对象就是数据值的几个&#xff0c;其书就结构就是若干组名值对&#xff0c;类似于其他语言中的哈希、散列 关联数组等&#xff0c;但对象在JavaScript中不仅仅扮…

基于Python+Django,我搭建一个视频点播平台

学习过程中&#xff0c;遇到问题可以咨询作者 功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括&#xff1a;首页、视频列表页面、视频详情页、用户中心模…

VMware workstation安装Fedora-Server-39-1.5虚拟机并配置网络

VMware workstation安装Fedora-Server-39-1.5虚拟机并配置网络 Fedora包含的软件以自由及开放源码许可来发布&#xff0c;并旨在成为该技术领域的领先者。Fedora在专注创新、抢先集成新技术、与上游Linux社区紧密工作方面拥有良好名声。该文档适用于在VMware workstation平台安…

一篇文章掌握负载均衡Ribbon作用和架构以及核心组件

目录 1、Ribbon是什么 2、Ribbon的作用 1.集中式LB 2.进程式LB 3、Ribbon负载均衡架构 总结&#xff1a; 4、Ribbon核心组件IRule 1、Ribbon是什么 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布…
最新文章