王 喆,楊連報(bào),劉宗洋
(中國(guó)鐵道科學(xué)研究院集團(tuán)有限公司 電子計(jì)算技術(shù)研究所,北京 100081)
近年來(lái),隨著鐵路信息化建設(shè)的逐步深入,系統(tǒng)覆蓋面越來(lái)越廣,積累的數(shù)據(jù)量越來(lái)越大。據(jù)初步統(tǒng)計(jì),鐵路數(shù)據(jù)總量已達(dá)PB級(jí),日增長(zhǎng)量超TB級(jí)。同時(shí),隨著物聯(lián)網(wǎng)及傳感器技術(shù)的廣泛應(yīng)用,特別是在鐵路行車(chē)安全監(jiān)控領(lǐng)域,積累了大量的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)[1]。對(duì)海量歷史數(shù)據(jù)的分析和挖掘有助于發(fā)現(xiàn)新的業(yè)務(wù)規(guī)律和現(xiàn)象,從而指導(dǎo)業(yè)務(wù)流程的改進(jìn)和創(chuàng)新,做到“強(qiáng)基達(dá)標(biāo)、提質(zhì)增效”。但是,由于鐵路現(xiàn)有信息系統(tǒng)架構(gòu)及硬件平臺(tái)能力的限制,鐵路各業(yè)務(wù)系統(tǒng)對(duì)歷史數(shù)據(jù)的分析和利用效率不高。因此,依托鐵路數(shù)據(jù)服務(wù)平臺(tái)的分布式計(jì)算架構(gòu),對(duì)海量的鐵路貨車(chē)超偏載檢測(cè)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,實(shí)現(xiàn)分車(chē)(運(yùn)輸任務(wù)去重)計(jì)算,為后續(xù)開(kāi)展鐵路貨運(yùn)分析奠定基礎(chǔ)。
為了保證貨車(chē)上裝載的貨物不超載、不偏載、不偏重、不集重,貨車(chē)運(yùn)輸沿途會(huì)設(shè)置許多超偏載檢測(cè)裝置對(duì)貨車(chē)的超偏載情況進(jìn)行檢測(cè)[2]。超偏載檢測(cè)裝置主要由稱(chēng)重臺(tái)面、傳感器、數(shù)據(jù)采集儀和計(jì)算機(jī)等組成[3],一般安裝在車(chē)站進(jìn)(出)站信號(hào)機(jī)附近。當(dāng)貨車(chē)車(chē)輛以一定速度通過(guò)超偏載檢測(cè)設(shè)備時(shí),位于鋼軌底部的壓力傳感器將接受到的壓力變化轉(zhuǎn)成數(shù)字信號(hào)傳至計(jì)算機(jī),計(jì)算得出貨物相關(guān)的數(shù)據(jù),并結(jié)合車(chē)號(hào)自動(dòng)識(shí)別系統(tǒng)和確報(bào)系統(tǒng)在超偏載檢測(cè)系統(tǒng)中生成一條記錄,包括當(dāng)前檢測(cè)的車(chē)輛編號(hào)、總重、通過(guò)時(shí)間、發(fā)到站信息、測(cè)點(diǎn)編碼、貨物編碼等。
目前,各鐵路局集團(tuán)公司在主要貨運(yùn)線路上部署了超過(guò)290個(gè)超偏載檢測(cè)點(diǎn),全路貨車(chē)車(chē)輛保有量超過(guò)70萬(wàn)輛,上述車(chē)輛每年途徑各檢測(cè)點(diǎn)生成的檢測(cè)記錄總數(shù)約1.4億條。假設(shè)一趟運(yùn)輸任務(wù)(從A地到B地)有N輛車(chē)組成,并途經(jīng)M個(gè)檢測(cè)點(diǎn),在不考慮設(shè)備失效的情況下該趟運(yùn)輸任務(wù)會(huì)生成N×M條檢測(cè)記錄。鐵路貨車(chē)超偏載檢測(cè)示意圖如圖1所示。
分車(chē)計(jì)算需要從這N×M條記錄中去除重復(fù)代表同一趟運(yùn)輸任務(wù)的多條記錄,并找出參與本次運(yùn)輸任務(wù)的車(chē)輛編號(hào)集合。分車(chē)計(jì)算的結(jié)果是實(shí)現(xiàn)貨運(yùn)運(yùn)量統(tǒng)計(jì)、始到站(起點(diǎn)站—終點(diǎn)站組合)發(fā)送貨物頻次和運(yùn)量統(tǒng)計(jì)、超偏載檢測(cè)設(shè)備性能評(píng)估等計(jì)算的基礎(chǔ)和前提。
圖1 鐵路貨車(chē)超偏載檢測(cè)示意圖Fig.1 Freight train overload and unbalance load detecting system
全路超偏載檢測(cè)信息最終匯集在貨運(yùn)計(jì)量系統(tǒng)的超偏載子系統(tǒng)中,數(shù)據(jù)存儲(chǔ)在Oracle數(shù)據(jù)庫(kù)中。該數(shù)據(jù)庫(kù)的車(chē)輛檢測(cè)信息表中記錄了每輛車(chē)經(jīng)過(guò)檢測(cè)點(diǎn)時(shí)的檢測(cè)記錄。超偏載車(chē)輛信息表部分信息如表1所示。研究選取全路2014—2016年的超偏載檢測(cè)記錄,數(shù)據(jù)量約4億條。
分車(chē)計(jì)算就是將一定時(shí)間范圍內(nèi),從A站到B站之間多個(gè)檢測(cè)點(diǎn)對(duì)若干輛車(chē)檢測(cè)的記錄中識(shí)別出相互不重復(fù)的運(yùn)輸任務(wù),并且輸出每趟運(yùn)輸所使用的車(chē)輛編號(hào)序列。計(jì)算方案如下。
(1)將所有記錄按照不同車(chē)輛編號(hào)分組,在同一分組內(nèi)再按照相同始發(fā)站、終到站分組,一共分成若干組。
(2)對(duì)每一組相同車(chē)輛編號(hào)、始發(fā)站、終到站的記錄集按照檢測(cè)時(shí)間升序排序。
(3)從分組的記錄集中識(shí)別出A站到B站所經(jīng)過(guò)的檢測(cè)點(diǎn)序列SAB。相同始到站檢測(cè)點(diǎn)序列示意圖如圖2所示。
表1 超偏載車(chē)輛信息表部分信息Tab.1 Partial information of vehicle table of overload and unbalance load detecting system
(4)以SAB序列為判斷依據(jù)重新遍歷記錄集,將記錄集分割成不同的運(yùn)輸任務(wù),結(jié)束。
圖2 相同始到站檢測(cè)點(diǎn)序列示意圖Fig.2 Diagram of the detection points sequence with same starting and destination point
該計(jì)算方案大體分作2個(gè)階段,第一階段分析得到A,B兩站之間的檢測(cè)點(diǎn)經(jīng)路序列;第二階段依據(jù)該序列進(jìn)行運(yùn)輸任務(wù)識(shí)別??紤]到任意A,B兩站之間的檢測(cè)點(diǎn)序列為有限多個(gè)且在相當(dāng)長(zhǎng)的時(shí)間范圍內(nèi)不會(huì)發(fā)生變化,因而該方案的優(yōu)點(diǎn)是使用該序列作為判斷依據(jù)識(shí)別運(yùn)輸任務(wù)準(zhǔn)確性較高。同時(shí),由于該方案需要多次在海量記錄集上的分組、排序、遍歷等操作,對(duì)軟硬件性能要求較高。考慮到使用傳統(tǒng)的Oracle數(shù)據(jù)庫(kù)結(jié)合SQL查詢(xún)實(shí)現(xiàn)上述計(jì)算方案在時(shí)間開(kāi)銷(xiāo)上無(wú)法接受,研究利用大數(shù)據(jù)平臺(tái)的分布式存儲(chǔ)和計(jì)算架構(gòu)解決上述問(wèn)題。
鐵路數(shù)據(jù)服務(wù)平臺(tái)以整合、集成成熟的開(kāi)源大數(shù)據(jù)平臺(tái)技術(shù)組件(Hadoop),采用分布式文件存儲(chǔ)、分布式計(jì)算框架(MapReduce),以及分布式內(nèi)存計(jì)算框架(Spark) 等開(kāi)源產(chǎn)品或技術(shù),同時(shí)利用統(tǒng)一目錄、統(tǒng)一權(quán)限等實(shí)現(xiàn)完善的安全控制和數(shù)據(jù)管理功能[4-5]。鐵路數(shù)據(jù)服務(wù)平臺(tái)技術(shù)架構(gòu)如圖3所示。
數(shù)據(jù)集成模塊能夠?qū)崿F(xiàn)結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)的實(shí)時(shí)、非實(shí)時(shí)的采集。利用數(shù)據(jù)集成模塊的結(jié)構(gòu)化數(shù)據(jù)采集功能(StreamSets)從超偏載檢測(cè)Oracle數(shù)據(jù)庫(kù)中批量采集了3年的歷史記錄約4億條,并存儲(chǔ)在開(kāi)源數(shù)據(jù)倉(cāng)庫(kù)(Hive)中。
結(jié)合開(kāi)源數(shù)據(jù)倉(cāng)庫(kù)自身的特點(diǎn),分車(chē)計(jì)算的具體實(shí)現(xiàn)步驟如下。
(1)數(shù)據(jù)清洗。車(chē)輛檢測(cè)數(shù)據(jù)表中車(chē)輛編號(hào)、始到站名稱(chēng)、檢測(cè)點(diǎn)編號(hào)是判斷和分組的重要依據(jù)。因此,數(shù)據(jù)條目中凡是上述字段為空的皆為無(wú)效數(shù)據(jù)。對(duì)原始的4億條數(shù)據(jù)進(jìn)行清洗后,余下約3.4億條有效數(shù)據(jù),將清洗完成的數(shù)據(jù)另存新表A。
(2)數(shù)據(jù)粗加工。在新表A中,對(duì)車(chē)輛編號(hào)進(jìn)行分組并按照時(shí)間升序排序。針對(duì)每一個(gè)車(chē)號(hào)順次掃描數(shù)據(jù),處理原則如下:①當(dāng)遇到前后兩行始到站信息不一樣時(shí),可判斷前一條記錄為一趟運(yùn)輸,將該記錄寫(xiě)入新表B;②當(dāng)前后兩行始到站一致但貨物不一致時(shí),可判斷前一段記錄為一趟運(yùn)輸,將該記錄寫(xiě)入新表B;③當(dāng)前后兩行始到站和貨物信息都一致時(shí),繼續(xù)向下搜索直到找到始到站不一樣的記錄,之前的記錄都存入臨時(shí)表C。
(3)經(jīng)路序列處理。在表A中,按照相同的始到站進(jìn)行分組,對(duì)每一對(duì)始到站,利用算法A1(探測(cè)點(diǎn)序列生成算法)產(chǎn)生當(dāng)前始到站之間的探測(cè)點(diǎn)經(jīng)路序列,將該結(jié)果存入字典表D。算法A1說(shuō)明如表2所示。
(4)產(chǎn)出結(jié)果。遍歷臨時(shí)表C,對(duì)每一組車(chē)號(hào)、始到站相同的記錄集進(jìn)行遍歷,結(jié)合字典表D,利用算法A2(探測(cè)點(diǎn)序列識(shí)別算法)識(shí)別相對(duì)獨(dú)立的任務(wù)序列。每趟任務(wù)只保留一次探測(cè)記錄并寫(xiě)入表B,表B即為分車(chē)計(jì)算的結(jié)果數(shù)據(jù)表。算法A2說(shuō)明如表3所示。
圖3 鐵路數(shù)據(jù)服務(wù)平臺(tái)技術(shù)架構(gòu)Fig.3 Technology architecture of railway data service platform
參與計(jì)算的鐵路數(shù)據(jù)服務(wù)平臺(tái)部署于某單位內(nèi)網(wǎng)中,集群規(guī)模為24臺(tái)服務(wù)器。為了充分發(fā)揮鐵路數(shù)據(jù)服務(wù)平臺(tái)集群運(yùn)算的優(yōu)勢(shì),整個(gè)計(jì)算過(guò)程在平臺(tái)上使用Spark SQL對(duì)Hive中結(jié)構(gòu)化數(shù)據(jù)進(jìn)行分析。Spark抽象出分布式內(nèi)存存儲(chǔ)結(jié)構(gòu)彈性分布式數(shù)據(jù)集RDD進(jìn)行數(shù)據(jù)的存儲(chǔ)[6-7],考慮到分車(chē)計(jì)算需要大量的數(shù)據(jù)聚合運(yùn)算,在使用Scala實(shí)現(xiàn)時(shí),在UDAF(User De fined Aggregate Function)的派生類(lèi)中重寫(xiě)了對(duì)DataFrame (升級(jí)版RDD)操作的各方法[8]。經(jīng)實(shí)際測(cè)試,對(duì)清洗后的3.4億條數(shù)據(jù)進(jìn)行分車(chē)計(jì)算操作耗時(shí)約12 min,大大優(yōu)于使用傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)統(tǒng)計(jì)的方法。
表2 算法A1說(shuō)明Tab.2 Explanation of algorithm A1
表3 算法A2說(shuō)明Tab.3 Explanation of algorithm A2
通過(guò)對(duì)3年超偏載檢測(cè)歷史數(shù)據(jù)的分車(chē)計(jì)算,原始數(shù)據(jù)4億條(有效數(shù)據(jù)3.4億條)經(jīng)過(guò)運(yùn)輸任務(wù)去重后得到結(jié)果數(shù)據(jù)約6 000萬(wàn)條。對(duì)結(jié)果數(shù)據(jù)的正確性驗(yàn)證同時(shí)采用了2種方案。方案一:宏觀驗(yàn)證,即基于分車(chē)得到的結(jié)果數(shù)據(jù)進(jìn)行運(yùn)輸任務(wù)統(tǒng)計(jì),如2015年全路貨物品類(lèi)發(fā)送量排名、十大發(fā)貨地排名、逐月貨物發(fā)送量等;將統(tǒng)計(jì)結(jié)果同網(wǎng)絡(luò)上公開(kāi)發(fā)表的同樣指標(biāo)的數(shù)據(jù)進(jìn)行比較,考察宏觀層面的準(zhǔn)確率。方案二:細(xì)節(jié)驗(yàn)證,即編寫(xiě)SQL腳本在Oracle平臺(tái)上對(duì)一段時(shí)間內(nèi)(數(shù)據(jù)記錄在百萬(wàn)條量級(jí),計(jì)算能力可接受范圍內(nèi))的檢測(cè)記錄進(jìn)行分車(chē)操作,充分利用關(guān)系型數(shù)據(jù)庫(kù)增刪改查的能力,生成最終結(jié)果集。將該結(jié)果集作為參照集同鐵路數(shù)據(jù)服務(wù)平臺(tái)生成的結(jié)果集進(jìn)行對(duì)比,得到結(jié)果匹配度。
經(jīng)對(duì)比,方案一的結(jié)果完全同現(xiàn)有公開(kāi)數(shù)據(jù)匹配;方案二選取2015年1—3月鐵路貨運(yùn)發(fā)送量按品類(lèi)排序與超偏載計(jì)算記錄數(shù)進(jìn)行對(duì)比,匹配程度為96%。2種驗(yàn)證方案的最終結(jié)果充分證明分車(chē)計(jì)算方案的正確性,并且性能優(yōu)勢(shì)明顯。
利用鐵路數(shù)據(jù)服務(wù)平臺(tái)存儲(chǔ)和計(jì)算的優(yōu)勢(shì)進(jìn)行超偏載檢測(cè)數(shù)據(jù)的統(tǒng)計(jì)分析,不僅實(shí)現(xiàn)了分車(chē)計(jì)算,從海量結(jié)構(gòu)化數(shù)據(jù)中去除了影響后續(xù)統(tǒng)計(jì)業(yè)務(wù)的重復(fù)運(yùn)輸任務(wù),還得到了許多有價(jià)值的結(jié)果數(shù)據(jù),如各貨運(yùn)站之間檢測(cè)點(diǎn)序列,全路各相鄰檢測(cè)點(diǎn)之間行車(chē)平均時(shí)長(zhǎng),檢測(cè)點(diǎn)稱(chēng)重誤差范圍等。這些結(jié)果數(shù)據(jù)對(duì)后續(xù)超偏載檢測(cè)設(shè)備的狀態(tài)判定有著重要價(jià)值,從而更加有效地保障鐵路行車(chē)安全。下一步應(yīng)充分考慮鐵路大數(shù)據(jù)建設(shè)架構(gòu)中“平臺(tái)+應(yīng)用”的模式,以鐵路數(shù)據(jù)服務(wù)平臺(tái)為基礎(chǔ),將研究的各項(xiàng)計(jì)算包裝成微應(yīng)用部署于平臺(tái)之上,更方便地服務(wù)于業(yè)務(wù)部門(mén)數(shù)據(jù)分析人員,提供更靈活、更快速響應(yīng)、更具擴(kuò)展性的服務(wù)。