期望目的

下载《Hadoop权威教程》里用到的NCDC天气数据,供后续在此数据基础上跑mapred程序。

操作过程

步骤一、编写简单的shell脚本,下载数据文件到本地文件系统

已知NCDC天气数据父目录地址为ftp://ftp.ncdc.noaa.gov/pub/data/noaa/,编写如下脚本下载1901年到1950年的天气数据:

#!/bin/sh
uri=ftp://ftp.ncdc.noaa.gov/pub/data/noaa/
start=
end=
for((i=start;i<=end;i++))
do
target_url="$uri$i/"
echo "start download $target_url" >> ./log
if [ ! -d "./$i" ]
then
mkdir "./$i"
fi
wget -r -nd -P "./$i" $target_url
done

关于shell脚本,可以去这里花1、2个小时大概过一遍:https://www.runoob.com/linux/linux-shell.html

创建目录存放将要下载的数据

cd ~
mkdir ncdc
cd ncdc

为上面写的脚本赋予执行权限

chmod +x download.sh

执行脚本

./download.sh

然后就是漫长的等待,由于这个ftp服务器在国外,链接也很不稳定,下载会经常超时中断,但是wget会自动重试,我们只需要不定时瞅一眼是不是还在下载就行了,

步骤二、将天气数据合并成每年一个文件

步骤一下载下来的文件是以年份、站点为文件单位组织的数据,文件体积较小,不便于发挥HDFS的块存储特性,这一步把天气数据按年组织成一个文本文件,用到的shell脚本如下:

#!/bin/bash
dir="raw"
if [ ! -e $dir -o ! -d $dir ]
then
mkdir $dir
fi for file in `ls`
do
if [ -d $file -a $file != $dir ]
then
for subfile in `ls $file`
do
if [[ $subfile == *.gz ]]
then
echo "find gzip file $subfile"
filename="${dir}/${file}.txt"
`gzip -d -c ${file}/${subfile} >> $filename >>error.log`
fi
done
fi
done

大致解释一下脚本的功能:遍历下载目录下的每个年份目录,将年份目录中的记录文件通过gzip工具解压,输出到以年份命名的txt文件中。

为该脚本赋予执行权限后,执行即可。

步骤三、将合并后的数据文件存入HDFS中

利用hdfs dfs命令,将处理好的数据存入hdfs中

hdfs dfs -mkdir /ncdc
hdfs dfs -put ~/ncdc/raw/ /ncdc

总结

至此,数据整合、存储入HDFS完毕,可通过hdfs命令查看 hdfs dfs -ls -R

Hadoop学习之NCDC天气数据获取的更多相关文章

  1. Hadoop学习之第一个MapReduce程序

    期望 通过这个mapreduce程序了解mapreduce程序执行的流程,着重从程序解执行的打印信息中提炼出有用信息. 执行前 程序代码 程序代码基本上是<hadoop权威指南>上原封不动 ...

  2. NCDC 天气数据的预处理

    "Hadoop: The Definitive Guild" 这本书的例子都是使用NCDC 天气数据的,但由于书的出版和现在已经有一段时间了,NCDC现在提供的原始数据结构已经有了 ...

  3. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  4. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

  5. Hadoop学习之旅三:MapReduce

    MapReduce编程模型 在Google的一篇重要的论文MapReduce: Simplified Data Processing on Large Clusters中提到,Google公司有大量的 ...

  6. [Hadoop] Hadoop学习历程 [持续更新中…]

    1. Hadoop FS Shell Hadoop之所以可以实现分布式计算,主要的原因之一是因为其背后的分布式文件系统(HDFS).所以,对于Hadoop的文件操作需要有一套全新的shell指令来完成 ...

  7. Hadoop学习笔记—2.不怕故障的海量存储:HDFS基础入门

    一.HDFS出现的背景 随着社会的进步,需要处理数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是却不方便管理和维护—>因此,迫切需要一种系统来管理多 ...

  8. Hadoop学习路线图

    Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括, ...

  9. Hadoop学习(5)-- Hadoop2

    在Hadoop1(版本<=0.22)中,由于NameNode和JobTracker存在单点中,这制约了hadoop的发展,当集群规模超过2000台时,NameNode和JobTracker已经不 ...

随机推荐

  1. MySQL 事务 异常 事务隔离的级别

    MySQL 事务 异常 事务隔离的级别   事务 在你操作数据库的同时,有可能其他用户还会不断地对数据进行增删改查操作.为了避免并行进行时出现混乱,就产生了"事务".事务就是要保证 ...

  2. jsp页面中同时遍历多个list集合

    在Jsp页面中,我们也许有这样的需求:从后端获取到多个List,但又想将这些List的值同时打印出来 比如, 有用户列表userList,user类有用户ID.用户名.用户性别等基本信息 有用户关系列 ...

  3. VSCode下,项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

    vscode下webpack错误:无法将“webpack”项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次. 解决方法: 1.因为 ...

  4. java 面向对象(二十三):关键字:abstract以及模板方法的设计模式

    abstract abstract: 抽象的1.可以用来修饰:类.方法2.具体的:abstract修饰类:抽象类 * > 此类不能实例化 * > 抽象类中一定有构造器,便于子类实例化时调用 ...

  5. 机器学习实战基础(三十七):随机森林 (四)之 RandomForestRegressor 重要参数,属性与接口

    RandomForestRegressor class sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’, criterion=’ ...

  6. Java数据类型自动转换(++ ,+=)

    在算术表达式中的自动类型转换 数据从类型范围小的自动向数据范围大的转换 整数向浮点数转换(包括long类型向float转换) 例子: char类型的范围内与整数之间转换依据ASCII表 强制转换会丢失 ...

  7. bzoj3436小K的农场

    bzoj3436小K的农场 题意: n个数,知道m条关系:a-b≥c.a-b≤c或a==b.问是否存在满足所有关系的情况.n≤10000,m≤10000. 题解: 差分约束.因为只要求是否满足,因此最 ...

  8. bzoj3858Number Transformation*

    bzoj3858Number Transformation 题意: 给一个数n,对其进行k次变换,第i次变换是将当前的n变成大于等于n的最小的i的倍数.求k次变换后n为多少.n≤10^10,k≤10^ ...

  9. Dubbo测试环境服务调用隔离这么玩对么

    背景阐述 前几天,有位同学问我一个关于 Dubbo 的问题.他的诉求是这样子的: 诉求一 第一个诉求是本地开发的时候想自己调用自己的服务,比如自己在改 A 服务,然后出问题了,本地再启动一个 B 服务 ...

  10. 媳妇儿让我给她找一个PDF转word免费工具,找了半天我决定给她写一个出来^-^

    ​ 之前我媳妇儿让我给她找一个PDF转WORD的免费工具,在网上找了半天发现要不就是收费,要不就是转化的格式混乱.既然网上不能找到好用的免费工具那就直接来写一个吧.人生苦短,我用python. 万能的 ...