苗 凡,戴琳琳,閻志遠(yuǎn),梅巧玲
(中國鐵道科學(xué)研究院 電子計算技術(shù)研究所,北京 100081)
Hadoop在客票日志處理系統(tǒng)中的應(yīng)用
苗 凡,戴琳琳,閻志遠(yuǎn),梅巧玲
(中國鐵道科學(xué)研究院 電子計算技術(shù)研究所,北京 100081)
借助Hadoop技術(shù)提出了一種新的架構(gòu),用于處理客票系統(tǒng)中產(chǎn)生的海量交易日志。首先將多個業(yè)務(wù)的數(shù)據(jù)收集起來并以一定的格式存儲在hase與hive中,然后對平臺中的數(shù)據(jù)進(jìn)行建模分析從中提取出有價值的關(guān)鍵業(yè)務(wù)信息。目前該系統(tǒng)已經(jīng)開發(fā)完成,切實提高了客票系統(tǒng)維護(hù)與運營的水平和效率。
Hadoop;大數(shù)據(jù);客票系統(tǒng);日志處理系統(tǒng)
鐵路客票發(fā)售與預(yù)訂系統(tǒng)(簡稱客票系統(tǒng))經(jīng)過十余年的發(fā)展已實現(xiàn)了全國聯(lián)網(wǎng)售票,目前互聯(lián)網(wǎng)注冊用戶達(dá)7 000多萬,每天用戶的登錄量達(dá)數(shù)百萬,產(chǎn)生的交易日志達(dá)數(shù)百Gbyte,這非常有益于聚合數(shù)據(jù),用于了解旅客如何使用系統(tǒng),同時還可以用于解決系統(tǒng)出現(xiàn)的異常問題。比如旅客無法購票或無法取票,開發(fā)人員可以根據(jù)相關(guān)日志發(fā)現(xiàn)問題并進(jìn)行調(diào)試。為了使開發(fā)與維護(hù)人員快速的發(fā)現(xiàn)問題,系統(tǒng)中的原始日志至關(guān)重要。
由于交易日志的數(shù)據(jù)量巨大,常規(guī)的數(shù)據(jù)庫已遠(yuǎn)遠(yuǎn)不能在本文可以接受的時間內(nèi)給出想要的結(jié)果,而且受制于傳統(tǒng)單機有限的計算機能力和存儲能力,所以本文選擇基于分布式計算的系統(tǒng),利用其開放的接口進(jìn)行日志的信息處理。Apache下的開源框架Hadoop是一個容易開發(fā)和并行處理大規(guī)模數(shù)據(jù)的分布式計算平臺,同時并行計算中存在的問題如分布式存儲、負(fù)載均衡、容錯處理、工作調(diào)試、網(wǎng)絡(luò)通信等也都由Hadoop負(fù)責(zé)。本文將簡單介紹Hadoop,包括HDFS和Mapreduce的組成與工作原理,并設(shè)計一種基于Hadoop的日志分析系統(tǒng)。
1.1 HDFS
HDFS是一個可擴(kuò)展的分布式文件系統(tǒng),與其它文件系統(tǒng)相比它同樣提供文件的重命名、移動、創(chuàng)建、刪除等操作,還具有文件的備份、數(shù)據(jù)校驗等特殊功能。一個HDFS集群包含一個主服務(wù)器(nameNode)和多個塊服務(wù)器(dataNode),內(nèi)部機制是將一個文件分割成一個或多個固定大小的塊(block),每個塊在被創(chuàng)建的時候,服務(wù)器會分配給它一個全球唯一的64 bit句柄進(jìn)行標(biāo)識,dataNode把塊作為linux文件保存在本地硬盤上,并根據(jù)指定的塊句柄和字節(jié)范圍來讀寫塊數(shù)據(jù)。為了保證可靠性,每個塊都會復(fù)制到多個dataNode上,缺省情況下,會保存3個備份。nameNode管理文件系統(tǒng)所有的元數(shù)據(jù),包括命名空間、訪問控制信息、文件到塊的映射信息以及塊當(dāng)前所在的位置。
1.2 Mapreduce
對于大數(shù)據(jù)量的計算,通常采用的處理手法就是并行計算,但現(xiàn)階段并行計算對許多開發(fā)人員來說還比較復(fù)雜。Hadoop Mapreduce是一種處理海量數(shù)據(jù)的并行編程模型,用于大規(guī)模數(shù)據(jù)的計算,使開發(fā)者在實現(xiàn)中不用考慮太多分布式相關(guān)的操作,只需要定義需要的map和reduce操作即可,極大的簡化了分布式編程。
日志分析系統(tǒng)是一個完整的信息系統(tǒng),它的架構(gòu)由上到下依次為表現(xiàn)層、服務(wù)層、資源層和總線層。表現(xiàn)層常用的構(gòu)架有Web/Restful,它們是數(shù)據(jù)的外在表現(xiàn)形式。服務(wù)層通過制定一系列業(yè)務(wù)規(guī)則來保證數(shù)據(jù)的合法性。資源層為系統(tǒng)的核心,所有交易日志的數(shù)據(jù)都存放在hbase/hive中,它通過jdbc的方式與服務(wù)層進(jìn)行通信??偩€層直接與各業(yè)務(wù)子系統(tǒng)進(jìn)行通信,通過它們之間的標(biāo)準(zhǔn)接口來收集各模塊的原始日志信息,從圖1中可以看到各層之間相互依賴,相互關(guān)聯(lián)構(gòu)成統(tǒng)一整體。
圖1 系統(tǒng)架構(gòu)
2.1 日志收集
客票系統(tǒng)由許多業(yè)務(wù)子系統(tǒng)組成,每個子系統(tǒng)所產(chǎn)生的日志格式都不同。并且每個子系統(tǒng)每天產(chǎn)生的日志量非常大,僅INETIS原始日志一天大約為30 Gbyte,為了將所有日志存儲在一個共有的集群中,首先要在每個業(yè)務(wù)系統(tǒng)上安裝日志收集服務(wù)程序,各個程序都通過ESB服務(wù)總線進(jìn)行交互,某個給定的服務(wù)既可以是提供者,也可以是請求者或者同時兼具2個角色。ESB提供4種標(biāo)準(zhǔn)接口與日志收集服務(wù)端進(jìn)行通信,分別是SOCKET,MQ,WEBSERVICE與FTP。
使用基本的Python模塊可以編寫腳本與ESP總線交互。Python 2.x編寫的日志收集程序由2個功能塊組成:(1)通過re模塊的正規(guī)表達(dá)式去匹配原始日志,findall()可以取得所有感興趣的字段并過濾掉多余的信息,再將所得的內(nèi)容一起寫入文件。(2)利用zipfile模塊對原始內(nèi)容進(jìn)行壓縮,大約可以節(jié)省90 %磁盤空間。由于客票主要業(yè)務(wù)都在白天進(jìn)行,因此最好將這些腳本以定時任務(wù)方式掛到服務(wù)器上,再通過標(biāo)準(zhǔn)接口發(fā)到ESP企業(yè)總線上。
由系統(tǒng)架構(gòu)圖可以看到,通過標(biāo)準(zhǔn)接口發(fā)到ESP總線上的消息,需要通過加密或包封轉(zhuǎn)換為提供者模式,再通過添加來自外部數(shù)據(jù)源的信息來增加消息的有效負(fù)載。更改消息的路由,可從支持請求者意圖的服務(wù)提供者中選擇。
2.2 日志存儲
系統(tǒng)中的Hadoop集群包括16個數(shù)據(jù)節(jié)點,共50 Tbyte的存儲空間。系統(tǒng)設(shè)計給需要保存半年的文件設(shè)置副本因子為3,其他文件設(shè)置副本因子為2。
Hadoop集群中的NameNode與DataNode使用完全相同的硬件,為了防止NameNode的單點故障,集群使用2臺單獨的機器配置NameNode,在任何時間點確保只有一臺處于active狀態(tài),另一臺處于standby狀態(tài),2個節(jié)點訪問同一個共享存儲設(shè)備,當(dāng)active節(jié)點出現(xiàn)故障時,另一個能夠?qū)崿F(xiàn)快速切換。
由于全天的日志數(shù)據(jù)量非常大,不可能統(tǒng)一收集到一臺服務(wù)器再一起導(dǎo)入,必須實時收集分散導(dǎo)入。而且由于Hadoop對于壓縮文件的導(dǎo)入效率不理想,系統(tǒng)會將原始格式分發(fā)到各個日志收集服務(wù)器,以分散計算提高整體的導(dǎo)入效率。在各個日志收集服務(wù)器上有一層負(fù)載均衡,以分散網(wǎng)絡(luò)I/O流量提高效率。日志存儲采用多進(jìn)程同時導(dǎo)入,系統(tǒng)會對導(dǎo)入過程進(jìn)行相關(guān)監(jiān)控,包括日志信息是否導(dǎo)入成功以及導(dǎo)入出錯的報警與恢復(fù)等。
2.3 日志處理
系統(tǒng)通過瀏覽器來展現(xiàn)圖形化的數(shù)據(jù)。(1)用戶依據(jù)不同的需求分析制定不同的業(yè)務(wù)規(guī)則。用戶制定完規(guī)則后通過瀏覽器提交日志處理任務(wù),此時MapReduce作業(yè)的2個階段及其InputFormat和OutputFormat一起形成了一個階段事件驅(qū)動架構(gòu)(SEDA)模型,在這個模型中一個請求將會分割成很多小的任務(wù)單元,并查詢節(jié)點空閑列表。(2)將任務(wù)單元分派給集群中空閑的計算節(jié)點。計算節(jié)點根據(jù)任務(wù)單元中的數(shù)據(jù)源信息從數(shù)據(jù)存儲節(jié)點中獲取數(shù)據(jù),并進(jìn)行相應(yīng)的計算工作。(3)將結(jié)果返回到任務(wù)調(diào)度節(jié)點進(jìn)行匯總,由任務(wù)調(diào)度節(jié)點將最終結(jié)果返回給用戶。所有計算節(jié)點每隔一段時間要向JobTracker發(fā)送一個心跳信號,以證明該計算節(jié)點工作正常及是否處于空閑狀態(tài)。主節(jié)點JobTracker也要實時將計算節(jié)點的壯態(tài)返回給任務(wù)調(diào)度節(jié)點。
以ctms日志為例,制定合適的業(yè)務(wù)規(guī)則,將不必要的內(nèi)容進(jìn)行過濾,對關(guān)心的內(nèi)容進(jìn)行重新設(shè)計數(shù)據(jù)結(jié)構(gòu)。原始的日志信息如下:
首先要處理的是日志數(shù)據(jù)的分隔符問題,hive的inputformat負(fù)責(zé)把輸入數(shù)據(jù)進(jìn)行格式化,然后提供給hive,outputformat,負(fù)責(zé)把hive輸出的數(shù)據(jù)重新格式化成目標(biāo)格式再輸出到文件,因此需要根據(jù)自己的需求重寫這2個方法,處理完后的內(nèi)容大致如下:
現(xiàn)在可對幾個月的日志進(jìn)行分析,如可統(tǒng)計每個請求響應(yīng)時間的最大值、最小值和平均值,統(tǒng)計每個中心的訪問量并按訪問量進(jìn)行排序,統(tǒng)計每秒訪問的tps,按訪問量降序排序并把結(jié)果輸出到表中等。hive提供的類sql語句對這些數(shù)據(jù)進(jìn)行自動化管理和處理,系統(tǒng)管理員只需要定制自己的輸入輸出適配器,hive將透明化存儲和處理這些數(shù)據(jù),使復(fù)雜工作簡化。
本文在客票系統(tǒng)中使用Hadoop進(jìn)行日志處理,將某些業(yè)務(wù)的交易日志以一定的數(shù)據(jù)格式存儲于Hadoop中,并對關(guān)鍵業(yè)務(wù)數(shù)據(jù)進(jìn)行監(jiān)控,如:能根據(jù)某幾個字段查找出符合條件的交易日志,能根據(jù)某幾個字段的值分析系統(tǒng)當(dāng)前的運行狀況等。后期還可以利用提取到的數(shù)據(jù)分析用戶行為,對用戶的歷史數(shù)據(jù)利用相關(guān)的技術(shù)進(jìn)行建模分析,并對其再次瀏覽目的進(jìn)行預(yù)測,同時投放相應(yīng)的廣告。如何從幾百億的數(shù)據(jù)中獲取關(guān)鍵的業(yè)務(wù)數(shù)據(jù),如何從這些數(shù)據(jù)中找出有價值的信息,將是后續(xù)研究的重點。
[1]朱建生,周亮瑾,單杏花,王明哲.新一代客票系統(tǒng)總體架構(gòu)研究[J].鐵路計算機應(yīng)用,2012(6):1-6.
[2]朱 珠.基于Hadoop的海量數(shù)據(jù)處理模型研究和應(yīng)用[D].北京:北京郵電大學(xué),2008.
責(zé)任編輯 方 圓
Application of Hadoop in Log Processing System of Ticketing and Reservation System
MIAO Fan, DAI Linlin, YAN Zhiyuan, MEI Qiaoling
( Institute of Computing Technologies, China Academy of Railway Sciences, Beijing 100081, China )
This paper, with the aid of Hadoop technologies, proposed a new architecture according to the transaction log which produced in Ticketing and Reservation System (TRS). First business data was modeled and saved in hase and hive with speci fi c format, then the interested key business information was extracted by designed business rules. At present, the System has been developed, the level and ef fi ciency of maintenance and operation were improved.
Hadoop; big data; Ticketing and Reservation System (TRS); Log Processing System
U293.22∶TP39
A
1005-8451(2014)05-0032-03
2013-12-02
苗 凡,研究實習(xí)員;戴琳琳,助理研究員 。