Hadoop學習之NCDC天氣數據獲取


期望目的

下載《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=1901
end=1950
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 2>>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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM