期望目的
下載《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