王丞,李磊,張銘彬
(1.江蘇淮安水利勘測(cè)設(shè)計(jì)研究院有限公司,江蘇 淮安 223005; 2.中國礦業(yè)大學(xué) 環(huán)境與測(cè)繪學(xué)院,江蘇 徐州 221116)
Linux是一套開源的類UNIX操作系統(tǒng),其具有支持多用戶、多進(jìn)程、多線程、實(shí)時(shí)性較好等優(yōu)點(diǎn)[1-2]。正因?yàn)檫@些優(yōu)點(diǎn),國際上很多知名的GNSS數(shù)據(jù)處理軟件基本上都是基于Linux開發(fā),如GAMIT、Bernese、Panda等,因此許多IGS分析中心將Linux系統(tǒng)作為GNSS數(shù)據(jù)處理平臺(tái)[3-7]。
目前國際上各大IGS分析中心,每天都需要使用大量的衛(wèi)星跟蹤站的觀測(cè)數(shù)據(jù),其中數(shù)據(jù)下載速度和完整性直接影響分析中心數(shù)據(jù)產(chǎn)品的解算精度和時(shí)效性。為了確保數(shù)據(jù)產(chǎn)品的解算精度和時(shí)效性,各個(gè)分析中心一般是采用提高網(wǎng)速、分站下載、優(yōu)先測(cè)站下載、多臺(tái)電腦同時(shí)下載的策略來確保數(shù)據(jù)下載的完整性和時(shí)效性。但采用提高網(wǎng)速和多臺(tái)電腦同時(shí)下載這種策略顯得不夠靈活。針對(duì)這種情況本文對(duì)傳統(tǒng)的數(shù)據(jù)下載方式進(jìn)行了改進(jìn),改進(jìn)的數(shù)據(jù)下載方式可在較短的時(shí)間內(nèi)實(shí)現(xiàn)數(shù)據(jù)高效完整的下載。下面將具體介紹改進(jìn)的數(shù)據(jù)下載方式程序?qū)崿F(xiàn)。
目前IGS數(shù)據(jù)中心有5個(gè),分別是美國NASA戈達(dá)德空間飛行中心地殼動(dòng)力學(xué)數(shù)據(jù)信息系統(tǒng)(CDDIS)、美國斯克里普斯海洋地理研究所(SIO)、法國國家地理研究所(IGN)、SOPAC以及中國的武漢大學(xué)(WHU)[8-9]。IGS數(shù)據(jù)中心存儲(chǔ)的數(shù)據(jù)可謂是海量的,清晰的數(shù)據(jù)歸檔方式便于用戶查找與下載數(shù)據(jù)[9-11]。IGS各種數(shù)據(jù)是按照一定的目錄進(jìn)行編排存儲(chǔ),不同的數(shù)據(jù)中心文件存儲(chǔ)目錄有一定的不同。下面以CDDIS數(shù)據(jù)中心為例介紹其數(shù)據(jù)歸檔方式,IGS數(shù)據(jù)歸檔方式如圖1所示。圖1中:wwww表示GPS周;yyyy表示年;doy表示年積日;yyn表示GPS導(dǎo)航文件夾;yyl表示GALILEO導(dǎo)航電文;yyo表示觀測(cè)值文件;yyd表示的壓縮的觀測(cè)值文件,部分文件以及文件的命名規(guī)則在此不作具體的介紹。用戶可根據(jù)需求從相應(yīng)的路徑下載相應(yīng)文件,下面將具體介紹相應(yīng)的下載程序。
Linux系統(tǒng)mget數(shù)據(jù)下載方法需要ftp這個(gè)用來登陸服務(wù)器的命令的配合才能進(jìn)行數(shù)據(jù)下載。以下載MGEX(Multi-GNSS Experiment)數(shù)據(jù)為例,其具體實(shí)現(xiàn)程序如下
01 set file_name=“”
02 foreach s (`cat $site_list`)
03 set file_name=($file_name $s$doy$chour[$ihour].$yy”o.Z”)
04 end
05 set LOCALPATH=/data/
06 set HOST=“cddis.gsfc.nasa.gov”
07 set USER=“anonymous”
08 set PASS=‘^M’
09 ftp —inv $HOST ?EOF
10 user $USER $PASS
11 lcd $LOCALPATH
12 cd/gnss/data/campaign/mgex/hourly/rinex3/$yyyy/$doy/$hour/
13 mget $file_name
14 bye
15 EOF
使用mget進(jìn)行下載數(shù)據(jù)時(shí)需要進(jìn)行以下三步:
1) 首先將需要下載的文件名存儲(chǔ)在一個(gè)數(shù)組中。如以上程序的03行,將需要下載的數(shù)據(jù)的文件名存儲(chǔ)在file_name中;
2) 然后登陸遠(yuǎn)程的ftp,進(jìn)入遠(yuǎn)程ftp數(shù)據(jù)存儲(chǔ)的路徑下。在登陸遠(yuǎn)程的服務(wù)器之前需要設(shè)置遠(yuǎn)程ftp的主機(jī)名、登陸的用戶名以及用戶密碼,由于IGS數(shù)據(jù)中心的數(shù)據(jù)可以免費(fèi)下載,可以使用”anonymous”匿名登錄,登錄密碼’^M’(相當(dāng)于“回車”的作用)。代碼的09行就是用來登入遠(yuǎn)程的服務(wù)器,12行是進(jìn)入遠(yuǎn)程ftp數(shù)據(jù)存儲(chǔ)的路徑;
3) 最后利用mget命令下載需要下載的數(shù)據(jù)。如以上程序的13行。
mget方法雖然可實(shí)現(xiàn)批量下載,但是其缺點(diǎn)是每次批量下載數(shù)不能超過50個(gè),并且下載初始化過程中會(huì)花費(fèi)很長的時(shí)間,因此mget下載方法效率并不是很高。以上介紹的是mget數(shù)據(jù)下載方法,接下來將介紹wget數(shù)據(jù)下載方法。
wget數(shù)據(jù)下載方法相對(duì)mget命令的區(qū)別在于其每下載一次數(shù)據(jù)需要登陸一下對(duì)方的ftp。理論上下載效率不如mget,但是在實(shí)際測(cè)試過程中,其下載效率比mget好。wget的下載方法具體實(shí)現(xiàn)如下
path=/cddis.gsfc.nasa.gov/pub/gnss/data
set site_list=site_list_mgex
set chour=(a b c d e f g h i j k l m n o p q r s t u v w x)
set ihour=$hour+1
foreach s (`cat $site_list`)
wget ftp://$path/hourly/$yyyy/$doy/$hour/$s$doy$chour[$ihour].$yy"o.Z"
wget ftp://$path/hourly/$yyyy/$doy/$hour/$s$doy$chour[$ihour].$yy"l.Z"
wget ftp://$path/hourly/$yyyy/$doy/$hour/$s$doy$chour[$ihour].$yy"g.Z"
wget ftp://$path/hourly/$yyyy/$doy/$hour/$s$doy$chour[$ihour].$yy"n.Z"
end
其中:$path為多模GNSS數(shù)據(jù)下載路徑;$yyyy、$doy、$hour分別為年、年積日、小時(shí),均可以作為變量輸入;$site_list為多模觀測(cè)值數(shù)據(jù)的測(cè)站列表;以UTC時(shí)的2015年5月22日0時(shí)為例。其中$yyyy=2015、$doy=142、$hour=05;其中$site_list的部分列表如表1所示。
表1 2015-05-22的不同小時(shí)文件夾下多模觀測(cè)值數(shù)據(jù)存儲(chǔ)情況
由表1結(jié)果可以看出mgex數(shù)據(jù)每小時(shí)更新情況可分為三種:
1) 部分測(cè)站只更新觀測(cè)值數(shù)據(jù)例如aira測(cè)站;
2) 部分測(cè)站既更新觀測(cè)值數(shù)據(jù)也更新導(dǎo)航數(shù)據(jù),但是在某一時(shí)段會(huì)不更新某一系統(tǒng)導(dǎo)航文件,例如dund測(cè)站;
3) 部分測(cè)站會(huì)在某一時(shí)段不更新數(shù)據(jù),例如areg測(cè)站。
據(jù)統(tǒng)計(jì)mgex觀測(cè)站有110多個(gè),IGS觀測(cè)站約460多個(gè),按傳統(tǒng)下載方式進(jìn)行下載,將會(huì)出現(xiàn)大量無數(shù)據(jù)下載登陸的情況,這樣會(huì)浪費(fèi)大量下載時(shí)間。在20 Mbit/s網(wǎng)速下wget一次登陸與登出不進(jìn)行數(shù)據(jù)下載大約需要2 s,假設(shè)按300次無數(shù)據(jù)下載登陸,那么至少浪費(fèi)10 min下載時(shí)間。為了節(jié)約時(shí)間對(duì)現(xiàn)有的下載方式進(jìn)行改進(jìn),下面將具體介紹改進(jìn)的數(shù)據(jù)下載方式。
據(jù)統(tǒng)計(jì)mgex的觀測(cè)站有110多個(gè),IGS(International GNSS Service)的觀測(cè)站約460多個(gè),如果按照傳統(tǒng)的下載方式進(jìn)行下載,將會(huì)出現(xiàn)很多次的無數(shù)據(jù)下載登陸,這樣會(huì)浪費(fèi)大量的下載時(shí)間。在20 Mbit/s的網(wǎng)速下wget一次登陸和登出不進(jìn)行數(shù)據(jù)下載大約需要2 s,假設(shè)按照300次的無數(shù)據(jù)下載的登陸,那么至少要浪費(fèi)10 min的下載時(shí)間。在與下載高頻的數(shù)據(jù)相比較其下載所要浪費(fèi)的時(shí)間將會(huì)增加4倍。為了節(jié)約時(shí)間需要對(duì)現(xiàn)有的下載方式進(jìn)行改進(jìn),下面將具體介紹改進(jìn)的方式。
針對(duì)1.2節(jié)和1.3介紹的數(shù)據(jù)下載時(shí)出現(xiàn)的情況,作者提出新的數(shù)據(jù)下載方式。新的下載方式是,事先登陸對(duì)方的ftp然后獲取存儲(chǔ)路徑下存在的數(shù)據(jù)的文件名,然后再利用wget進(jìn)行下載,這樣可避免無數(shù)據(jù)下載的登陸,大大節(jié)省了數(shù)據(jù)的下載時(shí)間。具體的程序?qū)崿F(xiàn)如下:
01 set HOST=“cddis.gsfc.nasa.gov”
02 set USER=“anonymous”
03 set PASS=‘^M’
04 set LOCALPATH=/data/
05 set PATH=/gnss/data/campaign/mgex/hourly/rinex3
06 ftp —inv $HOST ?EOF
07 user $USER $PASS
08 lcd $LOCALPATH
09 cd/$PATH/$yyyy/$doy/$hour/
10 ls/$PATH/$yyyy/$doy/$hour/$LOCALPATH> site_list.log
11 bye
12 EOF
13 awk `{print $9}` site_list.log> site_list
14 set path=/cddis.gsfc.nasa.gov/pub/gnss/data
15 foreach s (`cat $site_list`)
16 wget ftp://$path/hourly/$yyyy/$doy/$hour/$s
17 end
改進(jìn)的數(shù)據(jù)下載方式需要進(jìn)行三步:
1) 獲取數(shù)據(jù)存儲(chǔ)路徑下的各個(gè)文件的詳細(xì)信息。代碼的01~03行設(shè)置目標(biāo)ftp、登錄的賬號(hào)和密碼,04~05設(shè)置本地的數(shù)據(jù)存儲(chǔ)路徑和ftp數(shù)據(jù)存儲(chǔ)路徑,代碼的06~12行表示的是登陸并且登出ftp,其中09行表示進(jìn)入ftp數(shù)據(jù)存儲(chǔ)路徑下的文件夾,10行就是獲取mgex小時(shí)數(shù)據(jù)存儲(chǔ)路徑下的文件的詳細(xì)信息,其信息存儲(chǔ)在site_list.log文件中;
2) 從site_list.log文件中提取文件名信息。上面代碼13行就是獲取存儲(chǔ)路徑下存在的文件名信息。其存儲(chǔ)方式如表1各個(gè)時(shí)間段存在的文件名一樣;
3) 下載數(shù)據(jù)。代碼15~17行就是利用wget下載site_list中存在的文件。
下面將介紹數(shù)據(jù)自動(dòng)化下載實(shí)現(xiàn)方式,以及對(duì)比分析傳統(tǒng)的下載方式與改進(jìn)的下載方式的效率。
crontab命令允許指定Linux系統(tǒng)何時(shí)運(yùn)行腳本[2,8,9,12]。自動(dòng)化下載是通過Linux定時(shí)執(zhí)行配置的數(shù)據(jù)下載腳本而實(shí)現(xiàn)的,及用戶將定時(shí)所要執(zhí)行的下載任務(wù)寫在一個(gè)新的文件中,例如文件名為autorun:45 */1 * * */bin/csh/root/shell/sh_get_hourly>/root/log/sh_get_hourly.log 2>&1
該命令的時(shí)間“45 */1 * * *”為每年、每月、每天的每小時(shí)45分運(yùn)行“sh_get_hourly”腳本。由于自動(dòng)運(yùn)行全部在后臺(tái),不會(huì)輸出任何顯示信息,因此 “>/root/log/sh_get_hourly.log 2>&1”表示的含義是將“sh_get_hourly”運(yùn)行信息賦給一個(gè)sh_get_hourly.log日志文件,這樣方便檢查運(yùn)行的狀態(tài)及出現(xiàn)的錯(cuò)誤。編輯好autorun這個(gè)定時(shí)任務(wù)文件后執(zhí)行“crontab autorun”命令,將其加載到后臺(tái)中,這樣autorun中的定時(shí)任務(wù)會(huì)在指定的時(shí)間上運(yùn)行。為了防止自動(dòng)運(yùn)行的腳本到了規(guī)定時(shí)間還沒有結(jié)束而影響其他的進(jìn)程,可以用“kill”命令將其強(qiáng)制結(jié)束。數(shù)據(jù)自動(dòng)化下載流程如圖2所示,其運(yùn)行過程為
1) Linux,Crontab定時(shí)任務(wù)觸發(fā)器,觸發(fā)數(shù)據(jù)下載任務(wù)開始;
2) 運(yùn)行g(shù)et_data_list,腳本獲取數(shù)據(jù)中心中存在的數(shù)據(jù)測(cè)站列表;
3) 調(diào)用下載數(shù)據(jù)腳本,如調(diào)用get_hourly_data腳本,獲取數(shù)據(jù)中心小時(shí)數(shù)據(jù)文件;
4) 結(jié)束數(shù)據(jù)下載腳本運(yùn)行。
實(shí)驗(yàn)環(huán)境是: DELL T5810工作站,CentOS6.5linux系統(tǒng)平臺(tái),20 Mbit/s電信寬帶網(wǎng)速。在以上實(shí)驗(yàn)條件下分別采用改進(jìn)的數(shù)據(jù)下載方式和傳統(tǒng)的數(shù)據(jù)下載方式下載高頻觀測(cè)值數(shù)據(jù)和小時(shí)觀測(cè)值數(shù)據(jù)、比較其下載效率。
2.2.1 小時(shí)數(shù)據(jù)下載
選擇下載年積日為132的 00時(shí)、12時(shí)、22時(shí)三個(gè)時(shí)段IGS的n、g、d和MGEX的n、l、g、d文件為例。比較分析改進(jìn)的下載方式與傳統(tǒng)的下載方式在下載小時(shí)數(shù)據(jù)方面的下載效率,具體實(shí)驗(yàn)結(jié)果如表2和表3所示。由實(shí)驗(yàn)結(jié)果可得,改進(jìn)的數(shù)據(jù)下載方式下載IGS數(shù)據(jù)平均每小時(shí)可節(jié)約34 min,下載MGEX的數(shù)據(jù)平均每小時(shí)可節(jié)約17 min.
表2 不同小時(shí)的MGEX數(shù)據(jù)下載效率對(duì)比
表3 不同小時(shí)IGS數(shù)據(jù)下載效率對(duì)比
2.2.2 高頻數(shù)據(jù)下載
選擇下載年積日為132的 00時(shí)、12時(shí)、22時(shí)三個(gè)時(shí)段的IGS、MGEX高頻的d文件為例,比較分析改進(jìn)的下載方式與傳統(tǒng)的下載方式在下載高頻數(shù)據(jù)方面的下載效率。具體實(shí)驗(yàn)結(jié)果如表4和表5所示。由實(shí)驗(yàn)結(jié)果可得,改進(jìn)的數(shù)據(jù)下載方式下載IGS數(shù)據(jù)平均每小時(shí)可節(jié)約80 min,下載MGEX的數(shù)據(jù)平均每小時(shí)可節(jié)約13 min.
表4 不同小時(shí)的高頻IGS數(shù)據(jù)下載效率對(duì)比
表5 不同小時(shí)的高頻MGEX數(shù)據(jù)下載效率對(duì)比
由實(shí)驗(yàn)結(jié)果可以看出,隨著數(shù)據(jù)下載文件個(gè)數(shù)越多,改進(jìn)的數(shù)據(jù)下載方式下載效率越明顯。
本文是作者根據(jù)實(shí)際工作經(jīng)驗(yàn),發(fā)現(xiàn)原有的數(shù)據(jù)下載方式下載效率較低,為此改進(jìn)了原有的數(shù)據(jù)下載方法。改進(jìn)的數(shù)據(jù)下載方式的設(shè)計(jì)是在數(shù)據(jù)下載之前先獲取數(shù)據(jù)存儲(chǔ)路徑下存在的數(shù)據(jù)文件名,然后再對(duì)其進(jìn)行下載,這樣可避免無數(shù)據(jù)的下載登陸與登出,有效地縮短下載數(shù)據(jù)的時(shí)間。
由表2~表4的對(duì)比結(jié)果可知改進(jìn)的數(shù)據(jù)下載方式顯得更加靈活,在數(shù)據(jù)量越大的情況下改進(jìn)的數(shù)據(jù)下載方式的下載效率更高。
在實(shí)際應(yīng)用過程中由于IGS數(shù)據(jù)出現(xiàn)延遲上傳的情況,導(dǎo)致數(shù)據(jù)下載不完整,為了解決這一問題通過補(bǔ)下數(shù)據(jù)的方式來確保數(shù)據(jù)下載的完整性。本次實(shí)驗(yàn)未對(duì)IGMAS數(shù)據(jù)中心的數(shù)據(jù)進(jìn)行下載實(shí)驗(yàn),主要因?yàn)槠鋽?shù)據(jù)中心在國內(nèi)數(shù)據(jù)下載速度快,無需考慮數(shù)據(jù)下載效率問題。