客戶端代理裝置提供日 志查詢功能。與現(xiàn)有技術(shù)相比,本實(shí)施例提供的日志數(shù)據(jù)處理方法中節(jié)約了日志數(shù)據(jù)從日 志宿主機(jī)到HDFS存儲(chǔ)節(jié)點(diǎn)的傳輸時(shí)間,因此提高了處理日志數(shù)據(jù)的實(shí)時(shí)性;另外,由于不 需要專門(mén)的HDFS存儲(chǔ)節(jié)點(diǎn),同時(shí)還節(jié)約了存儲(chǔ)資源。
[0038] 進(jìn)一步值得說(shuō)明的是,基于本實(shí)施例提供的日志數(shù)據(jù)處理方法,在計(jì)算節(jié)點(diǎn)出現(xiàn) 機(jī)器故障或者重啟導(dǎo)致某個(gè)作業(yè)任務(wù)失敗的情況下,完全可以在計(jì)算節(jié)點(diǎn)恢復(fù)正常之后盡 快重新調(diào)度該作業(yè)任務(wù),保證作業(yè)任務(wù)的完成。具體理由是:在本實(shí)施例中,作業(yè)任務(wù)所需 的日志數(shù)據(jù)在短時(shí)間內(nèi)依然存儲(chǔ)在日志宿主機(jī)上,并且仍由客戶端代理裝置提供著該日志 數(shù)據(jù)的查詢服務(wù)。由此可見(jiàn),采用本實(shí)施例提供的方法還可以不用花費(fèi)大量精力去解決高 可靠通訊、計(jì)算冗余、持久化狀態(tài)等復(fù)雜難題。
[0039]在此說(shuō)明,本實(shí)施例提供的方法適用于任何日志數(shù)據(jù)處理場(chǎng)景。其中,一種常用的 日志數(shù)據(jù)處理場(chǎng)景是基于日志分析的監(jiān)控場(chǎng)景。本發(fā)明以下實(shí)施例將重點(diǎn)針對(duì)基于日志分 析的監(jiān)控場(chǎng)景,詳細(xì)說(shuō)明本發(fā)明技術(shù)方案。
[0040]在基于日志分析的監(jiān)控場(chǎng)景下,Hadoop的計(jì)算任務(wù)都是周期性的,這里的周期性 是指每次計(jì)算任務(wù)都要處理相同時(shí)間內(nèi)的日志數(shù)據(jù),例如每個(gè)任務(wù)周期均需處理一分鐘 內(nèi)產(chǎn)生的日志數(shù)據(jù)以產(chǎn)出這一周期的日志分析結(jié)果,這種任務(wù)需要查詢的是某分鐘,例如 2014-11-1111:11這一分鐘內(nèi)產(chǎn)生的日志數(shù)據(jù)?;诖?,本實(shí)施例設(shè)定單位周期,以單位周 期內(nèi)產(chǎn)生的日志數(shù)據(jù)為最小數(shù)據(jù)單位進(jìn)行存儲(chǔ)和查詢。其中,單位周期可以是1秒、1分鐘、 2分鐘、3分鐘、1小時(shí)等,具體可以根據(jù)用戶需求而定?;诖耍鲜鰰r(shí)間段標(biāo)識(shí)所標(biāo)識(shí)的時(shí) 間段包括至少一個(gè)單位周期。意味著,計(jì)算節(jié)點(diǎn)一次查詢請(qǐng)求可以查詢至少一個(gè)單位周期 內(nèi)產(chǎn)生的日志數(shù)據(jù)。
[0041]基于上述,客戶端代理裝置應(yīng)該為日志宿主機(jī)在每個(gè)單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù) 創(chuàng)建位置索引。
[0042]在一可選實(shí)施方式中,客戶端代理裝置可以自日志宿主機(jī)產(chǎn)生日志數(shù)據(jù)開(kāi)始,為 每個(gè)單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)創(chuàng)建位置索引。
[0043]在另一可選實(shí)施方式中,考慮到計(jì)算節(jié)點(diǎn)有可能從某個(gè)時(shí)間開(kāi)始才啟動(dòng)對(duì)日志宿 主機(jī)產(chǎn)生的日志數(shù)據(jù)的處理任務(wù),這樣為了減輕客戶端代理裝置的處理負(fù)擔(dān),降低對(duì)日志 宿主機(jī)的性能消耗,客戶端代理裝置可以根據(jù)計(jì)算節(jié)點(diǎn)發(fā)送的啟動(dòng)指示,開(kāi)始為日志宿主 機(jī)產(chǎn)生的日志數(shù)據(jù)創(chuàng)建位置索引。具體的,計(jì)算節(jié)點(diǎn)打算在第一時(shí)間啟動(dòng)對(duì)日志宿主機(jī)產(chǎn) 生的日志數(shù)據(jù)進(jìn)行處理的任務(wù)時(shí),向客戶端代理裝置發(fā)送啟動(dòng)指示,該啟動(dòng)指示用于指示 自第一時(shí)間開(kāi)始為每個(gè)單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)創(chuàng)建位置索引。相應(yīng)的,客戶端代理裝 置接收計(jì)算節(jié)點(diǎn)發(fā)送的啟動(dòng)指示,根據(jù)該啟動(dòng)指示,自第一時(shí)間開(kāi)始為每個(gè)單位周期內(nèi)產(chǎn) 生的日志數(shù)據(jù)創(chuàng)建位置索引,并將自第一時(shí)間開(kāi)始的每個(gè)單位周期和為每個(gè)單位周期內(nèi)產(chǎn) 生的日志數(shù)據(jù)所創(chuàng)建的位置索引對(duì)應(yīng)存儲(chǔ)到位置索引文件中。
[0044]對(duì)于自第一時(shí)間開(kāi)始的每個(gè)單位周期,是指從第一時(shí)間開(kāi)始計(jì)算,之后的每個(gè)單 位周期。例如,單位周期是1分鐘,第一時(shí)間是指2014-06-30-11-11這一分鐘,則客戶端代 理裝置需要為2014-06-30-11-12這一分鐘以及之后每分鐘內(nèi)產(chǎn)生的日志數(shù)據(jù)創(chuàng)建位置索 引。
[0045]值得說(shuō)明的是,位置索引可以用日志數(shù)據(jù)在日志文件中的起始字節(jié)位置和日志數(shù) 據(jù)的字節(jié)長(zhǎng)度來(lái)表示;或者,位置索引也可以用日志數(shù)據(jù)在日志文件中的起始字節(jié)位置和 結(jié)束字節(jié)位置來(lái)表示。
[0046]具體的,對(duì)于第一時(shí)間之后的每個(gè)單位周期,客戶端代理裝置對(duì)該單位周期的上 一個(gè)單位周期的尾部數(shù)據(jù)進(jìn)行解析,確定該單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)的起始位置,并對(duì) 該單位周期的尾部數(shù)據(jù)進(jìn)行解析,確定該單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)的長(zhǎng)度,作為該單位 周期內(nèi)產(chǎn)生的日志數(shù)據(jù)的位置索引。其中,該單位周期的尾部數(shù)據(jù)是指在該單位周期即將 結(jié)束時(shí)產(chǎn)生的日志數(shù)據(jù)。
[0047]簡(jiǎn)單來(lái)說(shuō),上述實(shí)施方式主要是利用了日志打印的特點(diǎn),即時(shí)間增序打?。ㄒ馑?是不可能出現(xiàn)較晚產(chǎn)生的日志數(shù)據(jù)打印在較早產(chǎn)生的日志數(shù)據(jù)之前),在相鄰單位周期交 替的時(shí)刻,客戶端代理裝置從單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)的末尾讀取少量字節(jié)進(jìn)行解析, 確定當(dāng)前單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)的結(jié)束點(diǎn)以及下一單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)的起 始點(diǎn)。
[0048] 例如,對(duì)于單位周期T和單位周期T+1,如果對(duì)單位周期T內(nèi)產(chǎn)生的日志數(shù)據(jù)的末 尾進(jìn)行分析,確定該末尾數(shù)據(jù)的下一字節(jié)是單位周期T+1內(nèi)產(chǎn)生的日志數(shù)據(jù),那說(shuō)明在這 個(gè)位置單位周期T內(nèi)產(chǎn)生的日志數(shù)據(jù)已經(jīng)全部結(jié)束,而單位周期T+1內(nèi)產(chǎn)生的日志數(shù)據(jù)剛 剛開(kāi)始,這個(gè)末尾數(shù)據(jù)就是兩個(gè)相鄰單位周期的交替點(diǎn)。找到交替點(diǎn)之后,客戶端代理裝置 就可以得到單位周期T內(nèi)產(chǎn)生的日志數(shù)據(jù)的結(jié)束點(diǎn)位置(其中,根據(jù)起始點(diǎn)位置和結(jié)束點(diǎn) 位置可以計(jì)算出日志數(shù)據(jù)的字節(jié)長(zhǎng)度),以及單位周期T+1產(chǎn)生的日志數(shù)據(jù)的起始點(diǎn)位置; 如此循環(huán)反復(fù),就能得到每個(gè)單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)的起始點(diǎn)位置和字節(jié)長(zhǎng)度,即位 置索引。
[0049] 值得說(shuō)明的是,在實(shí)際應(yīng)用中,有可能存在日志數(shù)據(jù)緩沖打印的情況(即某個(gè)時(shí) 刻產(chǎn)生的日志數(shù)據(jù)可能延遲幾秒才會(huì)打?。?,對(duì)該情況,客戶端代理裝置可以考慮推遲創(chuàng)建 位置索引,具體推遲多長(zhǎng)時(shí)間、一共容忍推遲多少次等可以根據(jù)實(shí)際情況進(jìn)行調(diào)整。
[0050] 經(jīng)過(guò)上述位置索引創(chuàng)建過(guò)程所創(chuàng)建的位置索引可以存儲(chǔ)到位置索引文件中,如表 1所示,是位置索引文件的一種實(shí)現(xiàn)結(jié)構(gòu)。
[0051]表1
[0052]
[0053] 結(jié)合上述位置索引文件,本發(fā)明另一實(shí)施例提供的日志數(shù)據(jù)處理方法的流程如圖 3所示,該方法包括:
[0054] 301、部署于日志宿主機(jī)上的客戶端代理裝置接收計(jì)算節(jié)點(diǎn)發(fā)送的查詢請(qǐng)求,該查 詢請(qǐng)求包括:日志文件標(biāo)識(shí)和時(shí)間段標(biāo)識(shí),該時(shí)間段標(biāo)識(shí)所標(biāo)識(shí)的時(shí)間段包括至少一個(gè)單 位周期。
[0055] 302、客戶端代理裝置根據(jù)上述日志文件標(biāo)識(shí),確定日志文件標(biāo)識(shí)所標(biāo)識(shí)的日志文 件對(duì)應(yīng)的位置索引文件,該位置索引文件對(duì)應(yīng)存儲(chǔ)有單位周期和單位周期內(nèi)產(chǎn)生的日志數(shù) 據(jù)的位置索引。
[0056] 303、客戶端代理裝置根據(jù)上述時(shí)間段標(biāo)識(shí),在上述位置索引文件中進(jìn)行匹配,并 判斷在位置索引文件中是否匹配到上述時(shí)間段包括的單位周期;如果是,則執(zhí)行步驟304 ; 如果否,則執(zhí)行步驟305。
[0057] 304、客戶端代理裝置獲取上述位置索引文件中匹配到的單位周期內(nèi)產(chǎn)生的日志 數(shù)據(jù)的位置索引,并執(zhí)行步驟306。
[0058] 305、客戶端代理裝置根據(jù)上述日志文件標(biāo)識(shí),對(duì)上述日志文件中的日志數(shù)據(jù)進(jìn) 行解析,確定上述時(shí)間段包括的每個(gè)單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)的位置索引,并執(zhí)行步驟 306。
[0059] 306、客戶端代理裝置根據(jù)上述時(shí)間段包括的每個(gè)單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)的 位置索引,從上述日志文件中獲取上述時(shí)間段包括的每個(gè)單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)。
[0060] 307、客戶端代理裝置將上述時(shí)間段包括的每個(gè)單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)傳輸 給計(jì)算節(jié)點(diǎn),以供計(jì)算節(jié)點(diǎn)進(jìn)行處理。
[0061] 在本實(shí)施例中,客戶端代理裝置在位置索引文件中查找查詢請(qǐng)求中時(shí)間段標(biāo)識(shí)所 標(biāo)識(shí)的時(shí)間段內(nèi)產(chǎn)生的日志數(shù)據(jù)的位置索引。關(guān)于位置索引文件可參見(jiàn)前述實(shí)施例描述的 方式獲得。
[0062] 考慮到有些日志數(shù)據(jù)的位置索引是從計(jì)算節(jié)點(diǎn)打算對(duì)該類日志數(shù)據(jù)進(jìn)行處理的 第一時(shí)間開(kāi)始創(chuàng)建的,所以位置索引文件中有可能不存在第一時(shí)間之前產(chǎn)生的日志數(shù)據(jù)的 位置索引。
[0063] 因此,對(duì)于未在位置索引文件中匹配到上述時(shí)間段包括的單位周期時(shí),客戶端代 理裝置可以根據(jù)上述日志文件標(biāo)識(shí),確定日志文件;然后采用二分法,對(duì)上述日志文件中的 日志數(shù)據(jù)進(jìn)行解析,獲得上述時(shí)間段包括的每個(gè)單位周期內(nèi)產(chǎn)生的日志數(shù)據(jù)的位置索引。 相應(yīng)的,客戶端代理裝置還可以將采用二分法所獲得的上述時(shí)間段包括的每個(gè)單位周期內(nèi) 產(chǎn)生的日志數(shù)據(jù)的位置索引以及對(duì)應(yīng)的單位周期存儲(chǔ)到位置索引文件中。
[0064] 以上述時(shí)間段包括的單位周期為單位周期T為例,則采用二分法,對(duì)日志文件中 的日志數(shù)據(jù)進(jìn)行分析,獲得單位周期T內(nèi)產(chǎn)生的位置索引的過(guò)程包括:
[0065] 步驟al、如果已經(jīng)預(yù)知單位周期T1和單位周期T2內(nèi)產(chǎn)生的日志數(shù)據(jù)的位置索引, 且T1〈T〈T2,可以確定T內(nèi)產(chǎn)生的日志數(shù)據(jù)在T1和T2產(chǎn)生的日志數(shù)據(jù)之間;
[0066] 值得說(shuō)明的是,如果無(wú)法確定與Τ最鄰近的Τ1和Τ2,則可以用日志文件的頭尾位 置對(duì)應(yīng)的單位周期分別作為Τ1和Τ2。
[0067]步驟a2、在Τ1和Τ2產(chǎn)生