白 俊,郭賀彬
(北京京北職業(yè)技術(shù)學(xué)院 機(jī)電工程系,北京 101400)
巨頭公司們每天有數(shù)以十億計(jì)的日志事件產(chǎn)生,從事大日志挖掘商業(yè)價(jià)值是一個極大的挑戰(zhàn),因?yàn)閭鹘y(tǒng)技術(shù)不能處理這么大規(guī)模的數(shù)據(jù).例如,如果載入數(shù)萬億的日志事件到Oracle數(shù)據(jù)庫,那么Oracle必須有集群.如果Oracle集群擴(kuò)展,那么性能會降低,一些傳統(tǒng)SQL的功能也會丟失[1].
時間就是金錢,如果我們想搜索和實(shí)時分析日志,oracle集群壓力巨大,傳統(tǒng)RMDBS無法在一個合理的響應(yīng)時間內(nèi)處理如此大量的數(shù)據(jù).
Hbase是一個基于Hadoop的新型非關(guān)系數(shù)據(jù)庫[2], 它是專為大數(shù)據(jù)的實(shí)時訪問而設(shè)計(jì).Rowkey是Hbase唯一個鍵值,這意味著在Hbase中沒有二次索引[3].所以當(dāng)我們想從Hbase搜索時,如果不直接使用rowkey,查詢數(shù)據(jù)時需要從硬盤導(dǎo)入更多的數(shù)據(jù)到內(nèi)存中.
Lucene是許多互聯(lián)網(wǎng)公司的標(biāo)準(zhǔn)搜索引擎,但它不適合大數(shù)據(jù)和云計(jì)算環(huán)境[4].Solr和ElasticSearch都基于Lucene,它們兩個都是開源項(xiàng)目.Solr適用于獨(dú)立的應(yīng)用程序,ElasticSearch是專為現(xiàn)代云計(jì)算環(huán)境設(shè)計(jì)[5].
ElasticSearch最大的特點(diǎn)是提供近乎實(shí)時的搜索服務(wù).雖然它是用Java實(shí)現(xiàn)的,但是集成了有很多客戶端支持比如 PHP,Ruby,Perl,Python,Scala.NE,JavaScript,Erlang和Clojure. Django,Couchbase 和SearchBox 也集成到ElasticSearch中. MongoDB,CounchDB,RabbitMQ、RSS、Sofa、JDBC、文件系統(tǒng),Dropbox,ActiveMQ,LDAP,亞馬遜,SQS,St9,OAI和Twitter可以直接導(dǎo)入到ElasticSearch[6].Zookeeper and internal Zen Discovery 可用于發(fā)現(xiàn)自動節(jié)點(diǎn),所有的分片和副本可以移動到任何節(jié)點(diǎn)的ElasticSearch集群中[7].索引可以分發(fā)到指定的分片和節(jié)點(diǎn),而且它是RESTFUL架構(gòu)的.
收集實(shí)時的均等的日志是檢索和分析的第一步,在這個測試中,F(xiàn)lume是用來做這項(xiàng)工作[8].
Flume代理從最終用戶機(jī)器收集日志事件,在Flume收集器側(cè),Hbase插件用于為Hbase提供日志事件.ElasticSearch插件用于分析日志事件和索引提供給ElasticSearch集群.圖1顯示了日志事件收集、索引和存儲.
ElasticSearch首先根據(jù)搜索條件得到需要的rowkey列表,Hbase用這些rowkey直接從數(shù)據(jù)庫中得到數(shù)據(jù),展示如圖2.搜索條件包括:主機(jī)名,日志文件路徑,日志文件名,日志文件類型,環(huán)境,關(guān)鍵字和事件體,開始時間和結(jié)束時間.
圖1 日志事件收集和索引流
圖2 搜索流量
假設(shè)所有的日志由應(yīng)用程序均等分組,通過一些公司調(diào)查發(fā)現(xiàn),SA喜歡把所有的日志單屏瀏覽.為了給用戶一個視覺友好的展示,日志事件應(yīng)該按他們的生成的序列出現(xiàn),所以hbase rowkey設(shè)計(jì)為順序的rowkey[9].順序rowkey適合順序讀取是因?yàn)橄嚓P(guān)的數(shù)據(jù)在同一個的數(shù)據(jù)塊內(nèi).
Hbase rowkey模式設(shè)計(jì)為:appid時間戳,nanotime主機(jī)名.因?yàn)槲覀兿胫С秩臋z索,所以需要為每一條日志建立索引;但同時,日志事件在一定時間后自動可以被丟棄.ElasticSearch的設(shè)計(jì)模式如下:
{
"_default_" :{
"_ttl" :{ //Default TTL is 6 months.
"enabled" :true,
"default" :7776000000},
"_source" :{
"enabled" :false},
"properties" :{
"env" :{ //whole env is used as term in Lucene.
"type" :"string",
"index" :"not_analyzed"},
"eventbody" :{ //log event body is
indexed.
"type" :"string"},
"hostname" :{
"type" :"string",
"index" :"not_analyzed"},
"logfilename" :{
"type" :"string",
"index" :"not_analyzed"},
"logpath" :{
"type" :"string",
"index" :"not_analyzed"},
"logtype" :{
"type" :"string",
"index" :"not_analyzed"},
"timestamp" :{ //timestamp and nanotime are used for sorting
"type" :"long",
"ignore_malformed" :false},
"nanotime" :{
"type" :"long",
"ignore_malformed" :false}
}}}
由于沒有足夠的資金支持,基于硬件創(chuàng)建了虛擬機(jī)[10-11].雖然商品硬件可以足夠支持Hadoop,但在生產(chǎn)環(huán)境中最好使用更強(qiáng)大的服務(wù)器.這就需要使用強(qiáng)大的硬件支持ElasticSearch.Hardware的硬件測試環(huán)境如表1.
表1 硬件測試環(huán)境
在這個實(shí)驗(yàn)中,從一個日志文件中載入足夠多的日志事件,ElasticSearch緩存是禁用的,因?yàn)橄雽Ρ日鎸?shí)的搜索性能.共有7 gb日志文件和有148928992個日志事件,搜索關(guān)鍵字是“bigdata”,總匹配日志事件的數(shù)量是4375.如果只是想獲得前25條匹配的日志事件,它將需要6 s,測試結(jié)果矩陣如表2所示.
表2 測試結(jié)果矩陣
測試矩陣可視化圖如圖3所示.
圖3 測試結(jié)果圖
基于文中設(shè)計(jì)的虛擬機(jī)環(huán)境,設(shè)計(jì)基于順序rowkey的ElasticSearch的設(shè)計(jì)模式,得到實(shí)驗(yàn)結(jié)果和矩陣可以總結(jié)出日志事件可以由Flume實(shí)時收集,在Flume收集器側(cè),Hbase插件用于為Hbase提供日志事件.ElasticSearch插件用于分析日志事件和索引提供給ElasticSearch集群.日志事件可以使用ElasticSearch被實(shí)時的索引和搜索出來,隨著搜索更多的日志事件,反應(yīng)時間不線性增加,并且它會在合理的時間返回結(jié)果,這是實(shí)驗(yàn)預(yù)期的性能,文中實(shí)驗(yàn)采用的是虛擬機(jī)環(huán)境,如果提供更強(qiáng)大的服務(wù)器到位,性能會更好.文中采用順序的rowkey,順序rowkey適合順序讀取是因?yàn)橄嚓P(guān)的數(shù)據(jù)在同一個的數(shù)據(jù)塊內(nèi),又因?yàn)閞owkey是Hbase的唯一關(guān)鍵性因素,在某些情況下可以重新設(shè)計(jì)rowkey來獲得更多的分布式區(qū)域以提升性能.
文中基于ElasticSearch 提出了實(shí)時進(jìn)行大日志數(shù)據(jù)搜索的軟件集成方案,并對設(shè)計(jì)方案進(jìn)行試驗(yàn),對試驗(yàn)數(shù)據(jù)進(jìn)行分析.數(shù)據(jù)結(jié)果表明,隨著搜索更多的日志事件,搜索反應(yīng)時間不線性增加,說明基于云搜索引擎ElasticSearch實(shí)時搜索大數(shù)據(jù)日志具有可行性.
管理分布式集群不是一件容易的工作,應(yīng)利用一些SCM工具管理Hadoop集群和ElasticSearch集群.當(dāng)收集越來越多的日志事件時,索引文件將增長的非常大,搜索所有大型索引文件在生產(chǎn)中是不可能的,可以按每日或者每周來切分日志.Hadoop生態(tài)系統(tǒng)和Lucene可以看做是谷歌系統(tǒng)的一些開源實(shí)現(xiàn),應(yīng)該留意谷歌最新的出版物、FaceBook和其他互聯(lián)網(wǎng)公司獲得更好的想法.
[1] 趙春雷.“大數(shù)據(jù)”時代的計(jì)算機(jī)信息處理技術(shù)[D].世界科學(xué),2012.
[2]White T.Hadoop權(quán)威指南(中文版)[M].北京:清華大學(xué)出版社,2010.
[3]楊寒冰,趙 龍,賈金原.Hbase數(shù)據(jù)庫遷移工具的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué)與探索,2013,7(3):236~246.
[4]McCandless M.Lucene實(shí)戰(zhàn)(第2版) [M].北京:人民郵電出版社,2011.
[5]Smiley D.Solr 1.4 Enterprise Search Server[M].Packt Publishing Limited,2009.
[6]王 珊,王會舉.架構(gòu)大數(shù)據(jù):挑戰(zhàn)、現(xiàn)狀與展望[M].北京:數(shù)據(jù)工程與知識工程教育部重點(diǎn)實(shí)驗(yàn)室(中國人民大學(xué)),2011.
[7]Lars George.HBase權(quán)威指南[M].南京:東南大學(xué)出版社,2012.
[8]趙彥榮.基于Hadoop的高效連接查詢處理算法CHMJ[M].北京:中國科學(xué)院計(jì)算技術(shù)研究所,2012.
[9]楊澤民,王文軍,郭顯娥.基于協(xié)同微粒群的股票數(shù)據(jù)關(guān)聯(lián)規(guī)則挖掘[J].吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,33(3):31~34.
[10]呂增輝,陶振凱,唐 靜.基于Lucene.net的對象持久化的實(shí)現(xiàn)[J].吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,30 (1):90~91.
[11]王俊生,施運(yùn)梅,張仰森.基于Hadoop的分布式搜索引擎關(guān)鍵技術(shù)[J].北京信息科技大學(xué)學(xué)報(bào),2011,26(4):53~61.