亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種日志處理方法和裝置與流程

文檔序號(hào):12364525閱讀:228來源:國知局
一種日志處理方法和裝置與流程

本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種日志處理方法和裝置。



背景技術(shù):

隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,互聯(lián)網(wǎng)大數(shù)據(jù)的趨勢(shì)日益顯著,每一條互聯(lián)網(wǎng)的業(yè)務(wù)線都在不斷地產(chǎn)生新的數(shù)據(jù),對(duì)產(chǎn)生的數(shù)據(jù)進(jìn)行進(jìn)一步地處理以對(duì)互聯(lián)網(wǎng)業(yè)務(wù)的運(yùn)行進(jìn)行反饋是相當(dāng)重要的工作之一。現(xiàn)有技術(shù)中,當(dāng)用戶希望對(duì)某一數(shù)據(jù)源輸出的數(shù)據(jù)進(jìn)行處理時(shí),需要根據(jù)相應(yīng)的處理需求手動(dòng)編寫數(shù)據(jù)處理程序,不同的數(shù)據(jù)處理需求需要重新編寫不同的程序,不同的用戶需要各自編寫所需的程序,十分費(fèi)時(shí)費(fèi)力,使得數(shù)據(jù)處理效率低下,不符合大數(shù)據(jù)發(fā)展趨勢(shì)。



技術(shù)實(shí)現(xiàn)要素:

鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種日志處理方法和裝置。

依據(jù)本發(fā)明的一個(gè)方面,提供了一種日志處理方法,該方法包括:

每隔預(yù)設(shè)時(shí)間段從輸入源接收一段數(shù)據(jù)流,每段數(shù)據(jù)流中包括在前一預(yù)設(shè)時(shí)間段內(nèi)產(chǎn)生的多條日志;

在接收到每段數(shù)據(jù)流后,對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析,得到每條日志對(duì)應(yīng)的指定結(jié)構(gòu)數(shù)據(jù);對(duì)該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行初次聚合,對(duì)初次聚合后的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行緩存;

當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果。

可選地,所述對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析,得到每條日志對(duì)應(yīng)的指定結(jié)構(gòu)數(shù)據(jù)包括:

從每條日志中提取一個(gè)或多個(gè)指定字段,以所述一個(gè)或多個(gè)指定字段的集合作為鍵,以所述一個(gè)或多個(gè)字段的集合在該日志中出現(xiàn)的次數(shù)作為值,得到該條日志對(duì)應(yīng)的鍵值對(duì)形式的元數(shù)據(jù)。

可選地,所述對(duì)該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行初次聚合包括:

對(duì)于該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)元數(shù)據(jù),按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合,得到初次聚合后的一個(gè)或多個(gè)元數(shù)據(jù)。

可選地,所述對(duì)初次聚合后的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行緩存包括:

將初次聚合后的元數(shù)據(jù)寫入分布式文件系統(tǒng)進(jìn)行緩存;

在將每個(gè)元數(shù)據(jù)寫入分布式文件系統(tǒng)中時(shí),如果分布式文件系統(tǒng)中存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則根據(jù)該待寫入元數(shù)據(jù)的值和預(yù)設(shè)更新規(guī)則,對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行更新;如果分布式文件系統(tǒng)中不存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則直接將該待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。

可選地,所述從每條日志中提取一個(gè)或多個(gè)指定字段,以所述一個(gè)或多個(gè)指定字段的集合作為鍵,以所述一個(gè)或多個(gè)字段的集合在該日志中出現(xiàn)的次數(shù)作為值,得到該條日志對(duì)應(yīng)的鍵值對(duì)形式的元數(shù)據(jù)包括:

從每條日志中提取指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段,以指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段的集合作為鍵,以“1”作為值,以所述鍵和所述值構(gòu)成該條日志對(duì)應(yīng)的元數(shù)據(jù)。

可選地,所述指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段包括:URL地址,版本信息,簽名信息,和/或,渠道信息。

可選地,所述從每條日志中提取指示訪問用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段,以指示訪問用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段的集合作為鍵,以“1”作為值,以所述鍵和所述值構(gòu)成該條日志對(duì)應(yīng)的元數(shù)據(jù)還包括:

從每條日志中提取指示用戶訪問業(yè)務(wù)的時(shí)間信息的字段,根據(jù)該字段記錄每條日志對(duì)應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。

可選地,所述對(duì)于該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)元數(shù)據(jù),按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合包括:

根據(jù)每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間,獲知該元數(shù)據(jù)所落入的統(tǒng)計(jì)周期;對(duì)落入同一統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù)按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合;對(duì)于落入同一統(tǒng)計(jì)周期內(nèi)具有相同鍵的多個(gè)元數(shù)據(jù),將所對(duì)應(yīng)的最大時(shí)間作為該多個(gè)元數(shù)據(jù)初次聚合后得到的相應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。

可選地,所述如果分布式文件系統(tǒng)中存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則根據(jù)該待寫入元數(shù)據(jù)的值和預(yù)設(shè)更新規(guī)則,對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行更新還包括:

判斷所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與該寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間是否落入同一統(tǒng)計(jì)周期,是則利用該待寫入元數(shù)據(jù)的值對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行累計(jì)更新,并將該待寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間中的較大時(shí)間作為更新后的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間;否則直接將待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。

可選地,所述當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果包括:

當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);

對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的標(biāo)識(shí)信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以該元數(shù)據(jù)的值作為二次解析后的元數(shù)據(jù)的值;

按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);

每個(gè)二次聚合后的元數(shù)據(jù)的值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的總訪問次數(shù)。

可選地,所述當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果包括:

當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);

對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的表述信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以“1”作為二次解析后的元數(shù)據(jù)的值;

按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);

每個(gè)二次聚合后的元數(shù)據(jù)的值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的獨(dú)立訪客數(shù)量。

可選地,該方法進(jìn)一步包括:

在到達(dá)當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間之前的第二預(yù)設(shè)時(shí)刻時(shí),將分布式文件系統(tǒng)中緩存的過期的元數(shù)據(jù)濾除。

可選地,所述將分布式文件系統(tǒng)中緩存的過期的元數(shù)據(jù)濾除包括:

將分布式文件系統(tǒng)中緩存的每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間進(jìn)行比較,如果一個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間小于當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間,確定該元數(shù)據(jù)為過期的元數(shù)據(jù),將該元數(shù)據(jù)的值置為空;

將分布式文件系統(tǒng)中值為空的元數(shù)據(jù)刪除。

可選地,該方法進(jìn)一步包括:

每隔預(yù)設(shè)時(shí)間間隔,調(diào)度一個(gè)線程讀取用戶輸入的配置信息;所述配置信息中包括:時(shí)間配置信息,輸入源信息,解析規(guī)則,和/或,計(jì)算規(guī)則;

所述每隔預(yù)設(shè)時(shí)間段從輸入源接收一段數(shù)據(jù)流包括:根據(jù)所述配置信息中的時(shí)間配置信息確定預(yù)設(shè)時(shí)間段,根據(jù)所述配置信息中的輸入源信息確定輸入源,每隔預(yù)設(shè)時(shí)間段從相應(yīng)的輸入源接收一段數(shù)據(jù)流;

所述對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析包括:根據(jù)所述配置信息中的解析規(guī)則對(duì)每條日志進(jìn)行初次解析;

所述對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理包括:根據(jù)所述配置信息中的計(jì)算規(guī)則對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理。

可選地,所述配置信息中還包括:計(jì)算平臺(tái)信息;所述日志處理方法基于該計(jì)算平臺(tái)信息指示的計(jì)算平臺(tái)執(zhí)行;

所述計(jì)算平臺(tái)為Spark Streaming計(jì)算平臺(tái)。

可選地,該方法進(jìn)一步包括:

將該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果保存到存儲(chǔ)介質(zhì)中;

所述存儲(chǔ)介質(zhì)包括:Redis數(shù)據(jù)庫,Mysql數(shù)據(jù)庫,和/或,GreenPlum數(shù)據(jù)庫。

依據(jù)本發(fā)明的另一個(gè)方面,提供了一種日志處理裝置,該裝置包括:

數(shù)據(jù)接收單元,適于每隔預(yù)設(shè)時(shí)間段從輸入源接收一段數(shù)據(jù)流,每段數(shù)據(jù)流中包括在前一預(yù)設(shè)時(shí)間段內(nèi)產(chǎn)生的多條日志;

計(jì)算處理單元,適于在接收到每段數(shù)據(jù)流后,對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析,得到每條日志對(duì)應(yīng)的指定結(jié)構(gòu)數(shù)據(jù);對(duì)該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行初次聚合,對(duì)初次聚合后的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行緩存;以及適于當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果。

可選地,所述計(jì)算處理單元,適于從每條日志中提取一個(gè)或多個(gè)指定字段,以所述一個(gè)或多個(gè)指定字段的集合作為鍵,以所述一個(gè)或多個(gè)字段的集合在該日志中出現(xiàn)的次數(shù)作為值,得到該條日志對(duì)應(yīng)的鍵值對(duì)形式的元數(shù)據(jù)。

可選地,所述計(jì)算處理單元,適于對(duì)于該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)元數(shù)據(jù),按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合,得到初次聚合后的一個(gè)或多個(gè)元數(shù)據(jù)。

可選地,所述計(jì)算處理單元,適于將初次聚合后的元數(shù)據(jù)寫入分布式文件系統(tǒng)進(jìn)行緩存;在將每個(gè)元數(shù)據(jù)寫入分布式文件系統(tǒng)中時(shí),如果分布式文件系統(tǒng)中存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則根據(jù)該待寫入元數(shù)據(jù)的值和預(yù)設(shè)更新規(guī)則,對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行更新;如果分布式文件系統(tǒng)中不存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則直接將該待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。

可選地,所述計(jì)算處理單元,適于從每條日志中提取指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段,以指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段的集合作為鍵,以“1”作為值,以所述鍵和所述值構(gòu)成該條日志對(duì)應(yīng)的元數(shù)據(jù)。

可選地,所述指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段包括:URL地址,版本信息,簽名信息,和/或,渠道信息。

可選地,所述計(jì)算處理單元,還適于從每條日志中提取指示用戶訪問業(yè)務(wù)的時(shí)間信息的字段,根據(jù)該字段記錄每條日志對(duì)應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。

可選地,所述計(jì)算處理單元,適于根據(jù)每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間,獲知該元數(shù)據(jù)所落入的統(tǒng)計(jì)周期;對(duì)落入同一統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù)按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合;對(duì)于落入同一統(tǒng)計(jì)周期內(nèi)具有相同鍵的多個(gè)元數(shù)據(jù),將所對(duì)應(yīng)的最大時(shí)間作為該多個(gè)元數(shù)據(jù)初次聚合后得到的相應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。

可選地,所述計(jì)算處理單元,還適于在判斷出分布式文件系統(tǒng)中存在與待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù)時(shí),進(jìn)一步判斷所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與該寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間是否落入同一統(tǒng)計(jì)周期,是則利用該待寫入元數(shù)據(jù)的值對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行累計(jì)更新,并將該待寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間中的較大時(shí)間作為更新后的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間;否則直接將待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。

可選地,所述計(jì)算處理單元,適于當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的標(biāo)識(shí)信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以該元數(shù)據(jù)的值作為二次解析后的元數(shù)據(jù)的值;按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);每個(gè)二次聚合后的元數(shù)據(jù)的值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的總訪問次數(shù)。

可選地,所述計(jì)算處理單元,適于當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的表述信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以“1”作為二次解析后的元數(shù)據(jù)的值;按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);每個(gè)二次聚合后的元數(shù)據(jù)的值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的獨(dú)立訪客數(shù)量。

可選地,該裝置進(jìn)一步包括:

過濾單元,適于在到達(dá)當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間之前的第二預(yù)設(shè)時(shí)刻時(shí),將分布式文件系統(tǒng)中緩存的過期的元數(shù)據(jù)濾除。

可選地,所述過濾單元,適于將分布式文件系統(tǒng)中緩存的每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間進(jìn)行比較,如果一個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間小于當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間,確定該元數(shù)據(jù)為過期的元數(shù)據(jù),將該元數(shù)據(jù)的值置為空;將分布式文件系統(tǒng)中值為空的元數(shù)據(jù)刪除。

可選地,該裝置進(jìn)一步包括:配置讀取單元;

所述配置讀取單元,適于每隔預(yù)設(shè)時(shí)間間隔,調(diào)度一個(gè)線程讀取用戶輸入的配置信息;所述配置信息中包括:時(shí)間配置信息,輸入源信息,解析規(guī)則,和/或,計(jì)算規(guī)則;

所述數(shù)據(jù)接收單元,適于根據(jù)所述配置信息中的時(shí)間配置信息確定預(yù)設(shè)時(shí)間段,根據(jù)所述配置信息中的輸入源信息確定輸入源,每隔預(yù)設(shè)時(shí)間段從相應(yīng)的輸入源接收一段數(shù)據(jù)流;

所述計(jì)算處理單元,適于根據(jù)所述配置信息中的解析規(guī)則對(duì)每條日志進(jìn)行初次解析;以及,適于根據(jù)所述配置信息中的計(jì)算規(guī)則對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理。

可選地,所述配置信息中還包括:計(jì)算平臺(tái)信息;所述日志處理裝置在該計(jì)算平臺(tái)信息指示的計(jì)算平臺(tái)上運(yùn)行;

所述計(jì)算平臺(tái)為Spark Streaming計(jì)算平臺(tái)。

可選地,該裝置進(jìn)一步包括:

存儲(chǔ)處理單元,適于將該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果保存到存儲(chǔ)介質(zhì)中;

所述存儲(chǔ)介質(zhì)包括:Redis數(shù)據(jù)庫,Mysql數(shù)據(jù)庫,和/或,GreenPlum數(shù)據(jù)庫。

由上述可知,本發(fā)明提供的技術(shù)方案通過分段接收數(shù)據(jù)流的方式接收日志,對(duì)于接收到的每段數(shù)據(jù)流中的日志均進(jìn)行初次解析和初次聚合,將處理得到的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)一步進(jìn)行計(jì)算處理以得到日志處理結(jié)果;整個(gè)過程在內(nèi)存,利用緩存對(duì)不斷流入的日志在進(jìn)行初步處理后得到的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行暫留備份以等待計(jì)算時(shí)機(jī)到達(dá)時(shí)對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,中間無需借助存儲(chǔ)介質(zhì),不會(huì)產(chǎn)生由于啟用進(jìn)程讀寫存儲(chǔ)介質(zhì)以及對(duì)存儲(chǔ)介質(zhì)中的數(shù)據(jù)進(jìn)行計(jì)算而帶來的延遲,對(duì)日志的初次解析、初次聚合以及計(jì)算處理均一次性完成,實(shí)現(xiàn)了處理效率高、運(yùn)行穩(wěn)定、中間數(shù)據(jù)不易丟失、盡可能保證實(shí)時(shí)性的日志處理方案。

上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。

附圖說明

通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:

圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種日志處理方法的流程圖;

圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種日志處理裝置的示意圖;

圖3示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的一種日志處理裝置的示意圖。

具體實(shí)施方式

下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。

圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種日志處理方法的流程圖。如圖1所示,該方法包括:

步驟S110,每隔預(yù)設(shè)時(shí)間段從輸入源接收一段數(shù)據(jù)流,每段數(shù)據(jù)流中包括在前一預(yù)設(shè)時(shí)間段內(nèi)產(chǎn)生的多條日志。

步驟S120,在接收到每段數(shù)據(jù)流后,對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析,得到每條日志對(duì)應(yīng)的指定結(jié)構(gòu)數(shù)據(jù);對(duì)該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行初次聚合,對(duì)初次聚合后的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行緩存。

步驟S130,當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果。

可見,圖1所示的方法通過分段接收數(shù)據(jù)流的方式接收日志,對(duì)于接收到的每段數(shù)據(jù)流中的日志均進(jìn)行初次解析和初次聚合,將處理得到的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)一步進(jìn)行計(jì)算處理以得到日志處理結(jié)果;整個(gè)過程在內(nèi)存,利用緩存對(duì)不斷流入的日志在進(jìn)行初步處理后得到的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行暫留備份以等待計(jì)算時(shí)機(jī)到達(dá)時(shí)對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,中間無需借助存儲(chǔ)介質(zhì),不會(huì)產(chǎn)生由于啟用進(jìn)程讀寫存儲(chǔ)介質(zhì)以及對(duì)存儲(chǔ)介質(zhì)中的數(shù)據(jù)進(jìn)行計(jì)算而帶來的延遲,對(duì)日志的初次解析、初次聚合以及計(jì)算處理均一次性完成,實(shí)現(xiàn)了處理效率高、運(yùn)行穩(wěn)定、中間數(shù)據(jù)不易丟失、盡可能保證實(shí)時(shí)性的日志處理方案。

在本發(fā)明的一個(gè)實(shí)施例中,圖1所示方法的步驟S120在接收到每段數(shù)據(jù)流后,對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析,得到每條日志對(duì)應(yīng)的指定結(jié)構(gòu)數(shù)據(jù)包括:從每條日志中提取一個(gè)或多個(gè)指定字段,以所述一個(gè)或多個(gè)指定字段的集合作為鍵,以所述一個(gè)或多個(gè)字段的集合在該日志中出現(xiàn)的次數(shù)作為值,得到該條日志對(duì)應(yīng)的鍵值對(duì)形式的元數(shù)據(jù)。例如,指定字段包括:指示用戶ID的字段和指示該用戶所點(diǎn)擊的URL地址的字段,在一條日志A中,指示用戶ID的字段為“xiaoming”,指示該用戶所點(diǎn)擊的URL地址的字段為“www.soopat.com”,則以集合(xiaoming,www.soopat.com)作為鍵,以該集合在日志A中出現(xiàn)的次數(shù)“1”作為值,得到日志A對(duì)應(yīng)的元數(shù)據(jù)為((xiaoming,www.soopat.com),1)。

在初次解析后得到每條日志對(duì)應(yīng)的鍵值對(duì)形式的元數(shù)據(jù)后,步驟S120對(duì)該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行初次聚合包括:對(duì)于該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)元數(shù)據(jù),按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合,得到初次聚合后的一個(gè)或多個(gè)元數(shù)據(jù)。例如,在進(jìn)行初次聚合時(shí),對(duì)于具有相同的鍵的多個(gè)元數(shù)據(jù),將這多個(gè)元數(shù)據(jù)的值的累加作為值,以上述相同的鍵依然作為鍵,構(gòu)成具有相同的鍵的多個(gè)元數(shù)據(jù)對(duì)應(yīng)的初次聚合后的元數(shù)據(jù);對(duì)于鍵與其他元數(shù)據(jù)不同的元數(shù)據(jù),將該元數(shù)據(jù)本身作為相應(yīng)的初次聚合后的元數(shù)據(jù)。

在初次聚合后得到初次聚合后的一個(gè)或多個(gè)元數(shù)據(jù)后,步驟S120對(duì)初次聚合后的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行緩存包括:將初次聚合后的元數(shù)據(jù)寫入分布式文件系統(tǒng)(HDFS)進(jìn)行緩存;在將每個(gè)元數(shù)據(jù)寫入分布式文件系統(tǒng)中時(shí),如果分布式文件系統(tǒng)中存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則根據(jù)該待寫入元數(shù)據(jù)的值和預(yù)設(shè)更新規(guī)則,對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行更新;如果分布式文件系統(tǒng)中不存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則直接將該待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。

例如,初次聚合后的一個(gè)指定結(jié)構(gòu)數(shù)據(jù)為((xiaoming,www.soopat.com),1),在將該指定結(jié)構(gòu)數(shù)據(jù)寫入HDFS中時(shí),如果HDFS中已存在元數(shù)據(jù)((xiaoming,www.soopat.com),5),則根據(jù)((xiaoming,www.soopat.com),1)的值“1”和預(yù)設(shè)更新規(guī)則,對(duì)所述已緩存元數(shù)據(jù)的值“5”進(jìn)行更新,如預(yù)設(shè)更新規(guī)則是累計(jì),則更新后的已緩存元數(shù)據(jù)為((xiaoming,www.soopat.com),6),表示已將指定結(jié)構(gòu)數(shù)據(jù)寫入HDFS中;如果HDFS中不存在鍵為(xiaoming,www.soopat.com)的元數(shù)據(jù),則直接將((xiaoming,www.soopat.com),1)寫入HDFS中。

可見,本實(shí)施例通過與HDFS的交互對(duì)日志處理過程中間產(chǎn)生的數(shù)據(jù)進(jìn)行緩存,由于對(duì)HDFS的讀寫過程是緩存讀寫過程,延遲小,效率高,盡可能地保證了日志處理過程的實(shí)時(shí)性,且HDFS的緩存為日志處理過程提供了數(shù)據(jù)備份,當(dāng)日志處理過程中發(fā)生數(shù)據(jù)丟失的異常時(shí)依然可以通過HDFS來盡可能恢復(fù)數(shù)據(jù)以減少對(duì)日志處理結(jié)果的影響。

在本發(fā)明的一個(gè)實(shí)施例中,本方案是根據(jù)用戶在前端頁面配置的日志處理任務(wù)來執(zhí)行日志處理過程,用戶配置的日志處理任務(wù)包括配置信息,則圖1所示的方法進(jìn)一步包括:每隔預(yù)設(shè)時(shí)間間隔,調(diào)度一個(gè)線程讀取用戶輸入的配置信息;所述配置信息中包括:時(shí)間配置信息,輸入源信息,解析規(guī)則,和/或,計(jì)算規(guī)則;其中,時(shí)間配置信息對(duì)日志處理過程中所用到的時(shí)間/時(shí)機(jī)進(jìn)行設(shè)置,輸入源信息指出了所接收的數(shù)據(jù)流的來源,解析規(guī)則指出了對(duì)日志中的何種字段進(jìn)行解析以及解析成何種格式,計(jì)算規(guī)則指出了各個(gè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)、對(duì)何種數(shù)據(jù)進(jìn)行計(jì)算以及需要進(jìn)行何種形式的計(jì)算等。即用戶可以通過配置信息對(duì)日志處理過程進(jìn)行設(shè)置,以使其滿足實(shí)際業(yè)務(wù)需求。

則在進(jìn)行日志處理的過程中,上述步驟S110每隔預(yù)設(shè)時(shí)間段從輸入源接收一段數(shù)據(jù)流包括:根據(jù)所述配置信息中的時(shí)間配置信息確定預(yù)設(shè)時(shí)間段,根據(jù)所述配置信息中的輸入源信息確定輸入源,每隔預(yù)設(shè)時(shí)間段從相應(yīng)的輸入源接收一段數(shù)據(jù)流。上述步驟S120對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析包括:根據(jù)所述配置信息中的解析規(guī)則對(duì)每條日志進(jìn)行初次解析;以及對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理包括:根據(jù)所述配置信息中的計(jì)算規(guī)則對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理。

本實(shí)施例通過周期性地讀取用戶輸入的配置信息,當(dāng)用戶輸入的配置信息發(fā)生更新后,根據(jù)讀取到的配置信息對(duì)日志處理過程進(jìn)行調(diào)整,符合處理需求。

進(jìn)一步地,用戶輸入的配置信息中還包括:計(jì)算平臺(tái)信息;本方案提供的日志處理方法基于該計(jì)算平臺(tái)信息指示的計(jì)算平臺(tái)執(zhí)行;在本實(shí)施例中,計(jì)算平臺(tái)為Spark Streaming計(jì)算平臺(tái),Spark Streaming計(jì)算平臺(tái)支持的數(shù)據(jù)接收方式是分段式周期性地流入而非流式連續(xù)流入,且Spark Streaming計(jì)算平臺(tái)具有與HDFS進(jìn)行交互的特性,基于此特征可以更流暢地執(zhí)行對(duì)日志處理中間數(shù)據(jù)進(jìn)行緩存的步驟。

在本發(fā)明的一個(gè)實(shí)施例中,在步驟S130之后,圖1所示的方法進(jìn)一步包括:將該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果保存到存儲(chǔ)介質(zhì)中;所述存儲(chǔ)介質(zhì)包括:Redis數(shù)據(jù)庫,Mysql數(shù)據(jù)庫,和/或,GreenPlum數(shù)據(jù)庫??梢?,本實(shí)施例是一次性得到最終的日志處理結(jié)果后再存入相應(yīng)的存儲(chǔ)介質(zhì)中,與現(xiàn)有技術(shù)中將中間數(shù)據(jù)存入到存儲(chǔ)介質(zhì)中后再調(diào)用進(jìn)程讀取數(shù)據(jù)進(jìn)行二次計(jì)算的方式是完全不同的,

在本發(fā)明的一個(gè)具體的實(shí)施例中,日志處理方案旨在根據(jù)多個(gè)業(yè)務(wù)產(chǎn)生的日志計(jì)算各個(gè)業(yè)務(wù)的總訪問次數(shù)(PV)和/或各個(gè)業(yè)務(wù)的獨(dú)立訪客數(shù)量(UV),基于Spark Streaming計(jì)算平臺(tái)執(zhí)行日志處理流程,具體如下:

多個(gè)業(yè)務(wù)產(chǎn)生的日志不斷投放到指定輸入源,每隔預(yù)設(shè)時(shí)間段從指定輸入源接收一段數(shù)據(jù)流,每段數(shù)據(jù)流中包括在前一預(yù)設(shè)時(shí)間段內(nèi)多個(gè)業(yè)務(wù)產(chǎn)生的多條日志;在接收到每段數(shù)據(jù)流后,對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析:從每條日志中提取指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段,以指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段的集合作為鍵,以“1”作為值(每條日志對(duì)應(yīng)的訪問行為只有一次),以所述鍵和所述值構(gòu)成該條日志對(duì)應(yīng)的元數(shù)據(jù),可以看出每條日志對(duì)應(yīng)的元數(shù)據(jù)表征了一次用戶訪問業(yè)務(wù)的行為;其中,指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段包括:URL地址,版本信息,簽名信息,和/或,渠道信息。例如,從Kafka輸入源中分段獲取數(shù)據(jù)流,對(duì)于一段數(shù)據(jù)流X,從第一條日志中提取出指示用戶的標(biāo)識(shí)信息的字段guid1和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段url1,得到第一條日志對(duì)應(yīng)的元數(shù)據(jù)為((guid1,url1),1),從第二條日志中提取出guid1和url3,得到第二條日志對(duì)應(yīng)的元數(shù)據(jù)為((guid1,url3),1),從第三條日志中提取出guid3和url2,得到第三條日志對(duì)應(yīng)的元數(shù)據(jù)為((guid3,url1),1),同理,直至得到該段數(shù)據(jù)流X中的最后一條日志對(duì)應(yīng)的元數(shù)據(jù),即該段數(shù)據(jù)流X對(duì)應(yīng)多個(gè)元數(shù)據(jù)[((guid1,url1),1),((guid1,url3),1),((guid3,url1),1),……]。

接著,對(duì)于該段數(shù)據(jù)流X中多條日志對(duì)應(yīng)的多個(gè)元數(shù)據(jù),按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合,得到初次聚合后的一個(gè)或多個(gè)元數(shù)據(jù);沿用上例,對(duì)該段數(shù)據(jù)流X對(duì)應(yīng)的多個(gè)元數(shù)據(jù)[((guid1,url1),1),((guid1,url3),1),((guid3,url1),1),……]進(jìn)行初次聚合,其中,(guid1,url1),1)在該段數(shù)據(jù)流X對(duì)應(yīng)的多個(gè)元數(shù)據(jù)中共出現(xiàn)過10次,((guid1,url3),1)在該段數(shù)據(jù)流X對(duì)應(yīng)的多個(gè)元數(shù)據(jù)中共出現(xiàn)過5次,((guid3,url1),1)在該段數(shù)據(jù)流X對(duì)應(yīng)的多個(gè)元數(shù)據(jù)中共出現(xiàn)過3次,其他同理,則初次聚合后得到的多個(gè)元數(shù)據(jù)為[((guid1,url1),10),((guid1,url3),5),((guid3,url1),3),……]。

每段數(shù)據(jù)流對(duì)應(yīng)的元數(shù)據(jù)經(jīng)初次聚合后再被寫入HDFS進(jìn)行緩存;在將一段數(shù)據(jù)流對(duì)應(yīng)的每個(gè)元數(shù)據(jù)寫入HDFS中時(shí),如將數(shù)據(jù)流X對(duì)應(yīng)的((guid1,url1),10)寫入HDFS時(shí),HDFS中已存在之前的數(shù)據(jù)流對(duì)應(yīng)的初次聚合后的元數(shù)據(jù),如果HDFS中存在((guid1,url1),90),則將HDFS中的((guid1,url1),90)的值與待寫入的((guid1,url1),10)的值累加,更改為((guid1,url1),100),表示((guid1,url1),10)已寫入HDFS,其他元數(shù)據(jù)的寫入過程同理,則將該段數(shù)據(jù)流X對(duì)應(yīng)的初次聚合后的元數(shù)據(jù)全部寫入HDFS后,HDFS中緩存的多個(gè)元數(shù)據(jù)為:[((guid1,url1),100),((guid1,url3),50),((guid3,url1),70),……]。

在到達(dá)計(jì)算時(shí)機(jī)時(shí),從HDFS中讀取元數(shù)據(jù),對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析:將該元數(shù)據(jù)的鍵中的指示用戶的標(biāo)識(shí)信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以該元數(shù)據(jù)的值作為二次解析后的元數(shù)據(jù)的第一個(gè)值,以“1”作為二次解析后的元數(shù)據(jù)的第二個(gè)值;沿用上例,對(duì)從HDFS讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析后得到的元數(shù)據(jù)為:[(url1,(100,1)),(url3,(50,1)),(url1,(70,1)),……]。

接著按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù),每個(gè)二次聚合后的元數(shù)據(jù)的第一個(gè)值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)的總訪問次數(shù)(PV),每個(gè)二次聚合后的元數(shù)據(jù)的第二個(gè)值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)的獨(dú)立訪客數(shù)量(UV);上例中[(url1,100,1),(url3,50,1),(url1,70,1),……]進(jìn)行二次聚合后的多個(gè)元數(shù)據(jù)為:[(url1,(170,2)),(url3,(70,15)),……],說明url1指示的業(yè)務(wù)的累計(jì)總訪問次數(shù)為170次,該170次的訪問中對(duì)應(yīng)的獨(dú)立訪問用戶的數(shù)量是2個(gè),url3指示的業(yè)務(wù)的累計(jì)總訪問次數(shù)為70次,該70次訪問中對(duì)應(yīng)的獨(dú)立訪問用戶的數(shù)量是15個(gè)。

可見,本實(shí)施例通過對(duì)接收到數(shù)據(jù)流中的日志進(jìn)行初次解析、初次聚合,得到每段數(shù)據(jù)流對(duì)應(yīng)的初次聚合后的元數(shù)據(jù),將每段數(shù)據(jù)流對(duì)應(yīng)的初次聚合后的每個(gè)元數(shù)據(jù)進(jìn)行緩存,緩存中的元數(shù)據(jù)表征了每段數(shù)據(jù)流對(duì)應(yīng)的元數(shù)據(jù)與之前接收到的其他段數(shù)據(jù)流對(duì)應(yīng)的元數(shù)據(jù)的綜合結(jié)果,在到達(dá)計(jì)算時(shí)機(jī)時(shí)對(duì)緩存中的元數(shù)據(jù)進(jìn)行二次解析和二次聚合,得到計(jì)算時(shí)機(jī)為止各個(gè)業(yè)務(wù)的累計(jì)總訪問次數(shù)和獨(dú)立訪客數(shù)。有些情況下,需要得到各個(gè)業(yè)務(wù)在預(yù)設(shè)統(tǒng)計(jì)周期內(nèi)的總訪問次數(shù)和獨(dú)立訪客數(shù),例如計(jì)算一天之內(nèi)某網(wǎng)站的總訪問次數(shù)和獨(dú)立訪客數(shù),以監(jiān)測(cè)該網(wǎng)站的運(yùn)營狀態(tài),為此,本實(shí)施例對(duì)日志處理方案進(jìn)一步進(jìn)行優(yōu)化:

在對(duì)接收到的每段數(shù)據(jù)流中的每條日志進(jìn)行初次解析時(shí),從每條日志中提取指示訪問用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段,以指示訪問用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段的集合作為鍵,以“1”作為值,以所述鍵和所述值構(gòu)成該條日志對(duì)應(yīng)的元數(shù)據(jù),以及,還從每條日志中提取指示用戶訪問業(yè)務(wù)的時(shí)間信息的字段,根據(jù)該字段記錄每條日志對(duì)應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。在上例的基礎(chǔ)上,數(shù)據(jù)流X對(duì)應(yīng)多個(gè)元數(shù)據(jù)[((guid1,url1),1,time1),((guid1,url3),1,time2),((guid3,url1),1,time3),……],本例中將每條日志對(duì)應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間記錄在元數(shù)據(jù)的值的后面。

接著按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合:根據(jù)每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間,獲知該元數(shù)據(jù)所落入的統(tǒng)計(jì)周期;對(duì)落入同一統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù)按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合;對(duì)于落入同一統(tǒng)計(jì)周期內(nèi)具有相同鍵的多個(gè)元數(shù)據(jù),將所對(duì)應(yīng)的最大時(shí)間作為該多個(gè)元數(shù)據(jù)初次聚合后得到的相應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。例如,以每天的0:00到24:00為統(tǒng)計(jì)周期,在數(shù)據(jù)流X對(duì)應(yīng)多個(gè)元數(shù)據(jù)[((guid1,url1),1,time1),((guid1,url3),1,time2),((guid3,url1),1,time3),……]中,((guid1,url1),1)共出現(xiàn)5次,分別是((guid1,url1),1,8月15日23:00)、((guid1,url1),1,8月15日16:30)、((guid1,url1),1,8月16日1:00)、((guid1,url1),1,8月16日2:00)和((guid1,url1),1,8月16日3:30),則在進(jìn)行初次聚合時(shí),將落入8月15日統(tǒng)計(jì)周期內(nèi)的前兩個(gè)元數(shù)據(jù)進(jìn)行聚合得到((guid1,url1),2,8月15日23:00),將落入8月16日統(tǒng)計(jì)周期內(nèi)的后三個(gè)元數(shù)據(jù)進(jìn)行聚合得到((guid1,url1),3,8月16日3:30),其他元數(shù)據(jù)的初次聚合過程同理。

進(jìn)一步地,將每段數(shù)據(jù)流對(duì)應(yīng)的初次聚合后的元數(shù)據(jù)寫入HDFS,其中,所述如果分布式文件系統(tǒng)中存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則根據(jù)該待寫入元數(shù)據(jù)的值和預(yù)設(shè)更新規(guī)則,對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行更新還包括:判斷所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與該寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間是否落入同一統(tǒng)計(jì)周期,是則利用該待寫入元數(shù)據(jù)的值對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行累計(jì)更新,并將該待寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間中的較大時(shí)間作為更新后的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間;否則直接將待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。例如,在將數(shù)據(jù)流X對(duì)應(yīng)的元數(shù)據(jù)((guid1,url1),3,8月16日3:30)寫入HDFS中時(shí),如果HDFS中存在鍵為(guid1,url1)且對(duì)應(yīng)的時(shí)間落入8月16日統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù),如((guid1,url1),100,8月16日15:00),則將該元數(shù)據(jù)更新為((guid1,url1),103,8月16日15:00);如果不存在,則將((guid1,url1),3,8月16日3:30)直接寫入HDFS中。

則當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果包括:當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的標(biāo)識(shí)信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以該元數(shù)據(jù)的值作為二次解析后的元數(shù)據(jù)的第一個(gè)值,以“1”作為二次解析后的元數(shù)據(jù)的第二個(gè)值;按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);每個(gè)二次聚合后的元數(shù)據(jù)的第一個(gè)值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的總訪問次數(shù),每個(gè)二次聚合后的元數(shù)據(jù)的第二個(gè)值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的獨(dú)立訪客數(shù)量。例如,當(dāng)?shù)竭_(dá)8月16日結(jié)束后2小時(shí)(即8月17日2:00),從HDFS中讀取落入8月16日統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù),[((guid1,url1),103,8月16日15:00),((guid1,url3),50,8月16日3:00),((guid3,url1),70,8月16日11:00),……],經(jīng)過二次解析后得到[url1,(103,1)),(url3,(50,1)),(url1,(70,1)),……],再經(jīng)過二次聚合后得到[url1,(173,2)),(url3,(66,12)),……],可知在8月16日統(tǒng)計(jì)周期內(nèi),url1的總訪問次數(shù)為173,獨(dú)立訪客數(shù)為2,url3的總訪問次數(shù)為66,獨(dú)立訪客數(shù)位12。

可見,通過增加對(duì)元數(shù)據(jù)對(duì)應(yīng)時(shí)間的記錄可以計(jì)算出各個(gè)統(tǒng)計(jì)周期內(nèi)的PV值和UV值,其中,以當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻作為當(dāng)前統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)的原因是:通常情況下,各個(gè)業(yè)務(wù)產(chǎn)生日志的時(shí)間與日志流入日志處理裝置中的時(shí)間之間有延遲,例如8月16日23:00用戶訪問指定網(wǎng)站的日志可能在8月17日1:00才以數(shù)據(jù)流的形式流入,則預(yù)留第一預(yù)設(shè)時(shí)刻作為緩沖,以盡可能地將統(tǒng)計(jì)周期內(nèi)所有的日志均采集到并進(jìn)行計(jì)算以得到更準(zhǔn)確的結(jié)果,但另一方面需要盡量保證日志處理過程的實(shí)時(shí)性,因此預(yù)留的緩沖時(shí)間不宜過長,各方面權(quán)衡,在上述例子中選取了兩個(gè)小時(shí)作為緩沖時(shí)間。

此外,在對(duì)當(dāng)前統(tǒng)計(jì)周期內(nèi)產(chǎn)生的日志進(jìn)行計(jì)算處理時(shí),當(dāng)前統(tǒng)計(jì)周期之前產(chǎn)生的日志對(duì)于本次計(jì)算處理過程來說已經(jīng)是過期數(shù)據(jù)了,如果將過期數(shù)據(jù)依然保留在HDFS中,HDFS中的數(shù)據(jù)量逐漸增大,將導(dǎo)致HDFS的讀寫處理速度變慢,影響日志處理效率,且一旦有過期數(shù)據(jù)混入計(jì)算中將導(dǎo)致計(jì)算結(jié)果不準(zhǔn)確,因此需要定期對(duì)HDFS中的過期數(shù)據(jù)進(jìn)行清理,即圖1所示的方法進(jìn)一步包括:在到達(dá)當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間之前的第二預(yù)設(shè)時(shí)刻時(shí),將分布式文件系統(tǒng)中緩存的過期的元數(shù)據(jù)濾除。具體地,將分布式文件系統(tǒng)中緩存的過期的元數(shù)據(jù)濾除包括:將分布式文件系統(tǒng)中緩存的每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間進(jìn)行比較,如果一個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間小于當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間,確定該元數(shù)據(jù)為過期的元數(shù)據(jù),將該元數(shù)據(jù)的值置為空;將分布式文件系統(tǒng)中值為空的元數(shù)據(jù)刪除。例如,在計(jì)算8月16日統(tǒng)計(jì)周期的PV值和UV值結(jié)束之后,在將要計(jì)算8月17日統(tǒng)計(jì)周期的PV值和UV值時(shí),HDFS中落入8月16日統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù)均成為過期數(shù)據(jù),則每個(gè)過期數(shù)據(jù)的值置為“none”,將值為“none”的元數(shù)據(jù)從HDFS中刪除。

圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種日志處理裝置的示意圖。如圖2所示,該日志處理裝置200包括:

數(shù)據(jù)接收單元210,適于每隔預(yù)設(shè)時(shí)間段從輸入源接收一段數(shù)據(jù)流,每段數(shù)據(jù)流中包括在前一預(yù)設(shè)時(shí)間段內(nèi)產(chǎn)生的多條日志。

計(jì)算處理單元220,適于在接收到每段數(shù)據(jù)流后,對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析,得到每條日志對(duì)應(yīng)的指定結(jié)構(gòu)數(shù)據(jù);對(duì)該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行初次聚合,對(duì)初次聚合后的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行緩存;以及適于當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果。

可見,圖2所示的裝置通過分段接收數(shù)據(jù)流的方式接收日志,對(duì)于接收到的每段數(shù)據(jù)流中的日志均進(jìn)行初次解析和初次聚合,將處理得到的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)一步進(jìn)行計(jì)算處理以得到日志處理結(jié)果;整個(gè)過程在內(nèi)存,利用緩存對(duì)不斷流入的日志在進(jìn)行初步處理后得到的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行暫留備份以等待計(jì)算時(shí)機(jī)到達(dá)時(shí)對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,中間無需借助存儲(chǔ)介質(zhì),不會(huì)產(chǎn)生由于啟用進(jìn)程讀寫存儲(chǔ)介質(zhì)以及對(duì)存儲(chǔ)介質(zhì)中的數(shù)據(jù)進(jìn)行計(jì)算而帶來的延遲,對(duì)日志的初次解析、初次聚合以及計(jì)算處理均一次性完成,實(shí)現(xiàn)了處理效率高、運(yùn)行穩(wěn)定、中間數(shù)據(jù)不易丟失、盡可能保證實(shí)時(shí)性的日志處理方案。

在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算處理單元220,適于從每條日志中提取一個(gè)或多個(gè)指定字段,以所述一個(gè)或多個(gè)指定字段的集合作為鍵,以所述一個(gè)或多個(gè)字段的集合在該日志中出現(xiàn)的次數(shù)作為值,得到該條日志對(duì)應(yīng)的鍵值對(duì)形式的元數(shù)據(jù)。

具體地,計(jì)算處理單元220,適于對(duì)于該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)元數(shù)據(jù),按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合,得到初次聚合后的一個(gè)或多個(gè)元數(shù)據(jù)。以及,計(jì)算處理單元220,所述計(jì)算處理單元,適于將初次聚合后的元數(shù)據(jù)寫入分布式文件系統(tǒng)進(jìn)行緩存;在將每個(gè)元數(shù)據(jù)寫入分布式文件系統(tǒng)中時(shí),如果分布式文件系統(tǒng)中存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則根據(jù)該待寫入元數(shù)據(jù)的值和預(yù)設(shè)更新規(guī)則,對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行更新;如果分布式文件系統(tǒng)中不存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則直接將該待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。以及,計(jì)算處理單元220,適于從每條日志中提取指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段,以指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段的集合作為鍵,以“1”作為值,以所述鍵和所述值構(gòu)成該條日志對(duì)應(yīng)的元數(shù)據(jù)。

其中,所述指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段包括:URL地址,版本信息,簽名信息,和/或,渠道信息。

在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算處理單元220,還適于從每條日志中提取指示用戶訪問業(yè)務(wù)的時(shí)間信息的字段,根據(jù)該字段記錄每條日志對(duì)應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。

則計(jì)算處理單元220,適于根據(jù)每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間,獲知該元數(shù)據(jù)所落入的統(tǒng)計(jì)周期;對(duì)落入同一統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù)按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合;對(duì)于落入同一統(tǒng)計(jì)周期內(nèi)具有相同鍵的多個(gè)元數(shù)據(jù),將所對(duì)應(yīng)的最大時(shí)間作為該多個(gè)元數(shù)據(jù)初次聚合后得到的相應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。

具體地,計(jì)算處理單元220,還適于在判斷出分布式文件系統(tǒng)中存在與待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù)時(shí),進(jìn)一步判斷所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與該寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間是否落入同一統(tǒng)計(jì)周期,是則利用該待寫入元數(shù)據(jù)的值對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行累計(jì)更新,并將該待寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間中的較大時(shí)間作為更新后的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間;否則直接將待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。

具體地,計(jì)算處理單元220,適于當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的標(biāo)識(shí)信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以該元數(shù)據(jù)的值作為二次解析后的元數(shù)據(jù)的值;按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);每個(gè)二次聚合后的元數(shù)據(jù)的值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的總訪問次數(shù)。

具體地,計(jì)算處理單元220,適于當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的表述信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以“1”作為二次解析后的元數(shù)據(jù)的值;按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);每個(gè)二次聚合后的元數(shù)據(jù)的值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的獨(dú)立訪客數(shù)量。

圖3示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的一種日志處理裝置的示意圖。如圖3所示,該日志處理裝置300包括:數(shù)據(jù)接收單元310、計(jì)算處理單元320、過濾單元330、配置讀取單元340和存儲(chǔ)處理單元350。

其中,數(shù)據(jù)接收單元310、計(jì)算處理單元320分別具有與圖2所示數(shù)據(jù)接收單元210、計(jì)算處理單元220相同的功能,相同的部分不再贅述。

過濾單元330,適于在到達(dá)當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間之前的第二預(yù)設(shè)時(shí)刻時(shí),將分布式文件系統(tǒng)中緩存的過期的元數(shù)據(jù)濾除。

具體地,過濾單元330,適于將分布式文件系統(tǒng)中緩存的每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間進(jìn)行比較,如果一個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間小于當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間,確定該元數(shù)據(jù)為過期的元數(shù)據(jù),將該元數(shù)據(jù)的值置為空;將分布式文件系統(tǒng)中值為空的元數(shù)據(jù)刪除。

配置讀取單元340,適于每隔預(yù)設(shè)時(shí)間間隔,調(diào)度一個(gè)線程讀取用戶輸入的配置信息;所述配置信息中包括:時(shí)間配置信息,輸入源信息,解析規(guī)則,和/或,計(jì)算規(guī)則。

數(shù)據(jù)接收單元310,適于根據(jù)所述配置信息中的時(shí)間配置信息確定預(yù)設(shè)時(shí)間段,根據(jù)所述配置信息中的輸入源信息確定輸入源,每隔預(yù)設(shè)時(shí)間段從相應(yīng)的輸入源接收一段數(shù)據(jù)流。

計(jì)算處理單元320,適于根據(jù)所述配置信息中的解析規(guī)則對(duì)每條日志進(jìn)行初次解析;以及,適于根據(jù)所述配置信息中的計(jì)算規(guī)則對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理。

在本發(fā)明的一個(gè)實(shí)施例中,所述配置信息中還包括:計(jì)算平臺(tái)信息;所述日志處理裝置在該計(jì)算平臺(tái)信息指示的計(jì)算平臺(tái)上運(yùn)行;所述計(jì)算平臺(tái)為Spark Streaming計(jì)算平臺(tái)。

存儲(chǔ)處理單元350,適于將該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果保存到存儲(chǔ)介質(zhì)中;所述存儲(chǔ)介質(zhì)包括:Redis數(shù)據(jù)庫,Mysql數(shù)據(jù)庫,和/或,GreenPlum數(shù)據(jù)庫。

需要說明的是,圖2-圖3所示裝置的各實(shí)施例與圖1所示方法的各實(shí)施例對(duì)應(yīng)相同,前文中已有詳細(xì)說明,在此不再贅述。

綜上所述,本發(fā)明提供的技術(shù)方案通過分段接收數(shù)據(jù)流的方式接收日志,對(duì)于接收到的每段數(shù)據(jù)流中的日志均進(jìn)行初次解析和初次聚合,將處理得到的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)一步進(jìn)行計(jì)算處理以得到日志處理結(jié)果;整個(gè)過程在內(nèi)存,利用緩存對(duì)不斷流入的日志在進(jìn)行初步處理后得到的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行暫留備份以等待計(jì)算時(shí)機(jī)到達(dá)時(shí)對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,中間無需借助存儲(chǔ)介質(zhì),不會(huì)產(chǎn)生由于啟用進(jìn)程讀寫存儲(chǔ)介質(zhì)以及對(duì)存儲(chǔ)介質(zhì)中的數(shù)據(jù)進(jìn)行計(jì)算而帶來的延遲,對(duì)日志的初次解析、初次聚合以及計(jì)算處理均一次性完成,實(shí)現(xiàn)了處理效率高、運(yùn)行穩(wěn)定、中間數(shù)據(jù)不易丟失、盡可能保證實(shí)時(shí)性的日志處理方案。

需要說明的是:

在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬裝置或者其它設(shè)備固有相關(guān)。各種通用裝置也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類裝置所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。

在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。

類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。

本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。

此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。

本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的一種日志處理裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。

應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。

本發(fā)明公開了A1、一種日志處理方法,其中,該方法包括:

每隔預(yù)設(shè)時(shí)間段從輸入源接收一段數(shù)據(jù)流,每段數(shù)據(jù)流中包括在前一預(yù)設(shè)時(shí)間段內(nèi)產(chǎn)生的多條日志;

在接收到每段數(shù)據(jù)流后,對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析,得到每條日志對(duì)應(yīng)的指定結(jié)構(gòu)數(shù)據(jù);對(duì)該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行初次聚合,對(duì)初次聚合后的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行緩存;

當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果。

A2、如A1所述的方法,其中,所述對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析,得到每條日志對(duì)應(yīng)的指定結(jié)構(gòu)數(shù)據(jù)包括:

從每條日志中提取一個(gè)或多個(gè)指定字段,以所述一個(gè)或多個(gè)指定字段的集合作為鍵,以所述一個(gè)或多個(gè)字段的集合在該日志中出現(xiàn)的次數(shù)作為值,得到該條日志對(duì)應(yīng)的鍵值對(duì)形式的元數(shù)據(jù)。

A3、如A2所述的方法,其中,所述對(duì)該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行初次聚合包括:

對(duì)于該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)元數(shù)據(jù),按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合,得到初次聚合后的一個(gè)或多個(gè)元數(shù)據(jù)。

A4、如A3所述的方法,其中,所述對(duì)初次聚合后的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行緩存包括:

將初次聚合后的元數(shù)據(jù)寫入分布式文件系統(tǒng)進(jìn)行緩存;

在將每個(gè)元數(shù)據(jù)寫入分布式文件系統(tǒng)中時(shí),如果分布式文件系統(tǒng)中存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則根據(jù)該待寫入元數(shù)據(jù)的值和預(yù)設(shè)更新規(guī)則,對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行更新;如果分布式文件系統(tǒng)中不存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則直接將該待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。

A5、如A4所述的方法,其中,所述從每條日志中提取一個(gè)或多個(gè)指定字段,以所述一個(gè)或多個(gè)指定字段的集合作為鍵,以所述一個(gè)或多個(gè)字段的集合在該日志中出現(xiàn)的次數(shù)作為值,得到該條日志對(duì)應(yīng)的鍵值對(duì)形式的元數(shù)據(jù)包括:

從每條日志中提取指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段,以指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段的集合作為鍵,以“1”作為值,以所述鍵和所述值構(gòu)成該條日志對(duì)應(yīng)的元數(shù)據(jù)。

A6、如A5所述的方法,其中,所述指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段包括:URL地址,版本信息,簽名信息,和/或,渠道信息。

A7、如A5所述的方法,其中,所述從每條日志中提取指示訪問用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段,以指示訪問用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段的集合作為鍵,以“1”作為值,以所述鍵和所述值構(gòu)成該條日志對(duì)應(yīng)的元數(shù)據(jù)還包括:

從每條日志中提取指示用戶訪問業(yè)務(wù)的時(shí)間信息的字段,根據(jù)該字段記錄每條日志對(duì)應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。

A8、如A7所述的方法,其中,所述對(duì)于該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)元數(shù)據(jù),按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合包括:

根據(jù)每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間,獲知該元數(shù)據(jù)所落入的統(tǒng)計(jì)周期;對(duì)落入同一統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù)按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合;對(duì)于落入同一統(tǒng)計(jì)周期內(nèi)具有相同鍵的多個(gè)元數(shù)據(jù),將所對(duì)應(yīng)的最大時(shí)間作為該多個(gè)元數(shù)據(jù)初次聚合后得到的相應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。

A9、如A8所述的方法,其中,所述如果分布式文件系統(tǒng)中存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則根據(jù)該待寫入元數(shù)據(jù)的值和預(yù)設(shè)更新規(guī)則,對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行更新還包括:

判斷所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與該寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間是否落入同一統(tǒng)計(jì)周期,是則利用該待寫入元數(shù)據(jù)的值對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行累計(jì)更新,并將該待寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間中的較大時(shí)間作為更新后的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間;否則直接將待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。

A10、如A9所述的方法,其中,所述當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果包括:

當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);

對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的標(biāo)識(shí)信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以該元數(shù)據(jù)的值作為二次解析后的元數(shù)據(jù)的值;

按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);

每個(gè)二次聚合后的元數(shù)據(jù)的值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的總訪問次數(shù)。

A11、如A9所述的方法,其中,所述當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果包括:

當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);

對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的表述信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以“1”作為二次解析后的元數(shù)據(jù)的值;

按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);

每個(gè)二次聚合后的元數(shù)據(jù)的值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的獨(dú)立訪客數(shù)量。

A12、如A10或A11所述的方法,其中,該方法進(jìn)一步包括:

在到達(dá)當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間之前的第二預(yù)設(shè)時(shí)刻時(shí),將分布式文件系統(tǒng)中緩存的過期的元數(shù)據(jù)濾除。

A13、如A12所述的方法,其中,所述將分布式文件系統(tǒng)中緩存的過期的元數(shù)據(jù)濾除包括:

將分布式文件系統(tǒng)中緩存的每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間進(jìn)行比較,如果一個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間小于當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間,確定該元數(shù)據(jù)為過期的元數(shù)據(jù),將該元數(shù)據(jù)的值置為空;

將分布式文件系統(tǒng)中值為空的元數(shù)據(jù)刪除。

A14、如A1所述的方法,其中,該方法進(jìn)一步包括:

每隔預(yù)設(shè)時(shí)間間隔,調(diào)度一個(gè)線程讀取用戶輸入的配置信息;所述配置信息中包括:時(shí)間配置信息,輸入源信息,解析規(guī)則,和/或,計(jì)算規(guī)則;

所述每隔預(yù)設(shè)時(shí)間段從輸入源接收一段數(shù)據(jù)流包括:根據(jù)所述配置信息中的時(shí)間配置信息確定預(yù)設(shè)時(shí)間段,根據(jù)所述配置信息中的輸入源信息確定輸入源,每隔預(yù)設(shè)時(shí)間段從相應(yīng)的輸入源接收一段數(shù)據(jù)流;

所述對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析包括:根據(jù)所述配置信息中的解析規(guī)則對(duì)每條日志進(jìn)行初次解析;

所述對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理包括:根據(jù)所述配置信息中的計(jì)算規(guī)則對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理。

A15、如A4所述的方法,其中,所述配置信息中還包括:計(jì)算平臺(tái)信息;所述日志處理方法基于該計(jì)算平臺(tái)信息指示的計(jì)算平臺(tái)執(zhí)行;

所述計(jì)算平臺(tái)為Spark Streaming計(jì)算平臺(tái)。

A16、如A1所述的方法,其中,該方法進(jìn)一步包括:

將該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果保存到存儲(chǔ)介質(zhì)中;

所述存儲(chǔ)介質(zhì)包括:Redis數(shù)據(jù)庫,Mysql數(shù)據(jù)庫,和/或,GreenPlum數(shù)據(jù)庫。

本發(fā)明還公開B17、一種日志處理裝置,其中,該裝置包括:

數(shù)據(jù)接收單元,適于每隔預(yù)設(shè)時(shí)間段從輸入源接收一段數(shù)據(jù)流,每段數(shù)據(jù)流中包括在前一預(yù)設(shè)時(shí)間段內(nèi)產(chǎn)生的多條日志;

計(jì)算處理單元,適于在接收到每段數(shù)據(jù)流后,對(duì)該段數(shù)據(jù)流中的每條日志進(jìn)行初次解析,得到每條日志對(duì)應(yīng)的指定結(jié)構(gòu)數(shù)據(jù);對(duì)該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行初次聚合,對(duì)初次聚合后的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行緩存;以及適于當(dāng)?shù)竭_(dá)預(yù)設(shè)統(tǒng)計(jì)周期的計(jì)算時(shí)機(jī)時(shí),對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理,得到該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果。

B18、如B17所述的裝置,其中,

所述計(jì)算處理單元,適于從每條日志中提取一個(gè)或多個(gè)指定字段,以所述一個(gè)或多個(gè)指定字段的集合作為鍵,以所述一個(gè)或多個(gè)字段的集合在該日志中出現(xiàn)的次數(shù)作為值,得到該條日志對(duì)應(yīng)的鍵值對(duì)形式的元數(shù)據(jù)。

B19、如B18所述的裝置,其中,

所述計(jì)算處理單元,適于對(duì)于該段數(shù)據(jù)流中多條日志對(duì)應(yīng)的多個(gè)元數(shù)據(jù),按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合,得到初次聚合后的一個(gè)或多個(gè)元數(shù)據(jù)。

B20、如B19所述的裝置,其中,

所述計(jì)算處理單元,適于將初次聚合后的元數(shù)據(jù)寫入分布式文件系統(tǒng)進(jìn)行緩存;在將每個(gè)元數(shù)據(jù)寫入分布式文件系統(tǒng)中時(shí),如果分布式文件系統(tǒng)中存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則根據(jù)該待寫入元數(shù)據(jù)的值和預(yù)設(shè)更新規(guī)則,對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行更新;如果分布式文件系統(tǒng)中不存在與該待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù),則直接將該待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。

B21、如B20所述的裝置,其中,

所述計(jì)算處理單元,適于從每條日志中提取指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段,以指示用戶的標(biāo)識(shí)信息的字段和指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段的集合作為鍵,以“1”作為值,以所述鍵和所述值構(gòu)成該條日志對(duì)應(yīng)的元數(shù)據(jù)。

B22、如B21所述的裝置,其中,所述指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段包括:URL地址,版本信息,簽名信息,和/或,渠道信息。

B23、如B21所述的方法,其中,

所述計(jì)算處理單元,還適于從每條日志中提取指示用戶訪問業(yè)務(wù)的時(shí)間信息的字段,根據(jù)該字段記錄每條日志對(duì)應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。

B24、如B23所述的裝置,其中,

所述計(jì)算處理單元,適于根據(jù)每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間,獲知該元數(shù)據(jù)所落入的統(tǒng)計(jì)周期;對(duì)落入同一統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù)按照元數(shù)據(jù)的鍵對(duì)元數(shù)據(jù)的值進(jìn)行初次聚合;對(duì)于落入同一統(tǒng)計(jì)周期內(nèi)具有相同鍵的多個(gè)元數(shù)據(jù),將所對(duì)應(yīng)的最大時(shí)間作為該多個(gè)元數(shù)據(jù)初次聚合后得到的相應(yīng)的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間。

B25、如B24所述的裝置,其中,

所述計(jì)算處理單元,還適于在判斷出分布式文件系統(tǒng)中存在與待寫入元數(shù)據(jù)的鍵相同的已緩存元數(shù)據(jù)時(shí),進(jìn)一步判斷所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與該寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間是否落入同一統(tǒng)計(jì)周期,是則利用該待寫入元數(shù)據(jù)的值對(duì)所述已緩存元數(shù)據(jù)的值進(jìn)行累計(jì)更新,并將該待寫入元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與所述已緩存元數(shù)據(jù)對(duì)應(yīng)的時(shí)間中的較大時(shí)間作為更新后的元數(shù)據(jù)對(duì)應(yīng)的時(shí)間;否則直接將待寫入元數(shù)據(jù)寫入分布式文件系統(tǒng)。

B26、如B25所述的裝置,其中,

所述計(jì)算處理單元,適于當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的標(biāo)識(shí)信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以該元數(shù)據(jù)的值作為二次解析后的元數(shù)據(jù)的值;按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);每個(gè)二次聚合后的元數(shù)據(jù)的值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的總訪問次數(shù)。

B27、如B25所述的裝置,其中,

所述計(jì)算處理單元,適于當(dāng)?shù)竭_(dá)當(dāng)前統(tǒng)計(jì)周期的結(jié)束時(shí)間后的第一預(yù)設(shè)時(shí)刻時(shí),根據(jù)各元數(shù)據(jù)對(duì)應(yīng)的時(shí)間從分布式文件系統(tǒng)中讀取落入當(dāng)前統(tǒng)計(jì)周期內(nèi)的元數(shù)據(jù);對(duì)讀取的每個(gè)元數(shù)據(jù)進(jìn)行二次解析,將該元數(shù)據(jù)的鍵中的指示用戶的表述信息的字段去除,以指示用戶所訪問業(yè)務(wù)的標(biāo)識(shí)信息的字段作為二次解析后的元數(shù)據(jù)的鍵,以“1”作為二次解析后的元數(shù)據(jù)的值;按照二次解析后的元數(shù)據(jù)的鍵對(duì)二次解析后的元數(shù)據(jù)的值進(jìn)行二次聚合,得到二次聚合后的元數(shù)據(jù);每個(gè)二次聚合后的元數(shù)據(jù)的值表示該二次聚合后的元數(shù)據(jù)的鍵所指示的業(yè)務(wù)在當(dāng)前統(tǒng)計(jì)周期內(nèi)的獨(dú)立訪客數(shù)量。

B28、如B26或2B7所述的裝置,其中,該裝置進(jìn)一步包括:

過濾單元,適于在到達(dá)當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間之前的第二預(yù)設(shè)時(shí)刻時(shí),將分布式文件系統(tǒng)中緩存的過期的元數(shù)據(jù)濾除。

B29、如B28所述的裝置,其中,

所述過濾單元,適于將分布式文件系統(tǒng)中緩存的每個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間與當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間進(jìn)行比較,如果一個(gè)元數(shù)據(jù)對(duì)應(yīng)的時(shí)間小于當(dāng)前統(tǒng)計(jì)周期的起始時(shí)間,確定該元數(shù)據(jù)為過期的元數(shù)據(jù),將該元數(shù)據(jù)的值置為空;將分布式文件系統(tǒng)中值為空的元數(shù)據(jù)刪除。

B30、如B17所述的裝置,其中,該裝置進(jìn)一步包括:配置讀取單元;

所述配置讀取單元,適于每隔預(yù)設(shè)時(shí)間間隔,調(diào)度一個(gè)線程讀取用戶輸入的配置信息;所述配置信息中包括:時(shí)間配置信息,輸入源信息,解析規(guī)則,和/或,計(jì)算規(guī)則;

所述數(shù)據(jù)接收單元,適于根據(jù)所述配置信息中的時(shí)間配置信息確定預(yù)設(shè)時(shí)間段,根據(jù)所述配置信息中的輸入源信息確定輸入源,每隔預(yù)設(shè)時(shí)間段從相應(yīng)的輸入源接收一段數(shù)據(jù)流;

所述計(jì)算處理單元,適于根據(jù)所述配置信息中的解析規(guī)則對(duì)每條日志進(jìn)行初次解析;以及,適于根據(jù)所述配置信息中的計(jì)算規(guī)則對(duì)緩存的指定結(jié)構(gòu)數(shù)據(jù)進(jìn)行計(jì)算處理。

B31、如B30所述的裝置,其中,所述配置信息中還包括:計(jì)算平臺(tái)信息;所述日志處理裝置在該計(jì)算平臺(tái)信息指示的計(jì)算平臺(tái)上運(yùn)行;

所述計(jì)算平臺(tái)為Spark Streaming計(jì)算平臺(tái)。

B32、如B17所述的裝置,其中,該裝置進(jìn)一步包括:

存儲(chǔ)處理單元,適于將該統(tǒng)計(jì)周期對(duì)應(yīng)的日志處理結(jié)果保存到存儲(chǔ)介質(zhì)中;

所述存儲(chǔ)介質(zhì)包括:Redis數(shù)據(jù)庫,Mysql數(shù)據(jù)庫,和/或,GreenPlum數(shù)據(jù)庫。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1