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