一種海量web日志數(shù)據(jù)查詢與分析方法
【專利摘要】本發(fā)明利用Hadoop/Hive分布式計算平臺的高可靠性、高擴展性、高效性以及高容錯性,公開了一種基于Hadoop和Hive的海量web日志數(shù)據(jù)的查詢與分析方法。本發(fā)明包括以下步驟:對各個數(shù)據(jù)源的數(shù)據(jù)進行解析;將數(shù)據(jù)裝載進數(shù)據(jù)倉庫中;接收HiveQL語句;對接受語句進行優(yōu)化,得到初步map結(jié)果;將接受語句轉(zhuǎn)換成MapReduce任務執(zhí)行并存儲查詢結(jié)果;數(shù)據(jù)分割;對數(shù)據(jù)進行分析挖掘;將數(shù)據(jù)裝載進Mysql數(shù)據(jù)庫中。本發(fā)明針對海量的web日志數(shù)據(jù),實現(xiàn)精確地查詢和數(shù)據(jù)分析,既能實現(xiàn)海量數(shù)據(jù)存儲查詢分析的可擴展性和高效性,也避免數(shù)據(jù)傾斜帶來的job分布不均整體性能下降的問題。
【專利說明】—種海量web日志數(shù)據(jù)查詢與分析方法
【技術領域】
[0001]本發(fā)明屬于計算機信息處理【技術領域】,具體涉及一種基于Hadoop和Hive的海量web日志數(shù)據(jù)查詢與分析方法。
【背景技術】
[0002]隨著Internet技術的飛速發(fā)展,運行于Internet上的各種應用和服務也隨之大量涌現(xiàn),大數(shù)據(jù)的時代已經(jīng)來臨。每個網(wǎng)站本身都是一個獨立的信息系統(tǒng),這些網(wǎng)站經(jīng)過網(wǎng)絡互聯(lián)后,使得整個互聯(lián)網(wǎng)變成了一個巨大的信息系統(tǒng)??蛻粼跒g覽網(wǎng)站的過程中會留下它們訪問的痕跡,這些痕跡會以web日志文件的形式保存下來。各種系統(tǒng)、程序、運維、交易等得日志變得越來越重要,因為它是系統(tǒng)恢復、錯誤跟蹤、安全檢測等操作的重要依據(jù)。
[0003]由于數(shù)據(jù)源眾多、各個系統(tǒng)的用戶繁多、操作頻繁,每日會產(chǎn)生TB級甚至PB級的海量web日志數(shù)據(jù),而傳統(tǒng)數(shù)據(jù)庫由于可擴展性和處理性能的限制,已經(jīng)不能滿足現(xiàn)今動輒數(shù)十G、數(shù)百G、甚至上T的數(shù)據(jù)量的存儲分析處理的要求。而在一大堆非結(jié)構化的日志文件里面,怎樣快速檢索出數(shù)據(jù)、怎樣快速尋找到有用的數(shù)據(jù)、怎樣對日志進行統(tǒng)計分析,成為亟待解決的問題?,F(xiàn)有的大數(shù)據(jù)查詢方法只能簡單通過HBase直接進行行鍵的搜索和借助Hive的HQL進行檢索,檢索時延很大,數(shù)據(jù)分析結(jié)果也不準確,不能滿足當前需求。
【發(fā)明內(nèi)容】
[0004]為解決上述問題,本發(fā)明利用Hadoop/Hive分布式計算平臺的高可靠性、高擴展性、高效性以及高容錯性,公開了一種基于Hadoop和Hive的海量web日志數(shù)據(jù)的查詢與分析方法。
[0005]開源框架Hadoop是一個廣泛應用而又非常獨特的工具,用戶通過自己編寫的MapReduce程序,并通過調(diào)度將一個任務分成很多更細粒度的子任務,并把這些子任務分布到集群中的不同節(jié)點,以并行的進行。這樣,在大的數(shù)據(jù)集的情形下也可得到用戶接受的時間間隔。Hadoop使得不懂分布式計算的用戶也可以充分利用分布式計算帶來的好處。Hive首先由Facebook在2008年開源,一經(jīng)推出,就使得Hive的使用變得非常流行,Hadoop的用戶可以根據(jù)自己的數(shù)據(jù)處理需求來使用開發(fā)Hive。Hive定義了簡單的類SQL查詢語言,稱為HiveQL,允許熟悉SQL的用戶查詢數(shù)據(jù)。同時,這個語言也允許熟悉MapReduce開發(fā)者的開發(fā)自定義的mapper和reducer來處理內(nèi)建的mapper和reducer無法完成的復雜的分析工作。Hive主要包括用戶接口、元數(shù)據(jù)存儲、解釋器、編譯器、優(yōu)化器、執(zhí)行器等等。由解釋器、編譯器、優(yōu)化器生成的計劃存儲在Hadoop的分布式文件系統(tǒng)文件系統(tǒng)HDFS中,執(zhí)行器調(diào)用MapReduce程序完成語句的調(diào)用分析。
[0006]本發(fā)明針對web日志數(shù)據(jù)海量特征,根據(jù)實際情況對海量web日志數(shù)據(jù)進行相關的查詢與分析,以優(yōu)化的HiveQL為查詢的重要手段,以數(shù)據(jù)分割和遺傳算法的結(jié)合對海量日志數(shù)據(jù)進行分析,實現(xiàn)大數(shù)據(jù)的高效挖掘。
[0007]為了達到上述目的,本發(fā)明提供如下技術方案: 一種海量web日志數(shù)據(jù)查詢與分析方法,包括如下步驟:
步驟(1),用Hive中的ETL對各個數(shù)據(jù)源的數(shù)據(jù)進行解析,解析過程包括提取、清洗、轉(zhuǎn)化和加載四個步驟,在對數(shù)據(jù)進行清洗時,將其中的有用信息用MapReduce程序進行分布式抽取處理;
步驟(2),將抽取出來的數(shù)據(jù)裝載進數(shù)據(jù)倉庫中;
步驟(3), Hive的部件Driver接收HiveQL語句;
步驟(4),針對傾斜數(shù)據(jù)對接受語句進行優(yōu)化,進行表連接操作后得到初步的map結(jié)果;
步驟(5),將接收到的HiveQL語句轉(zhuǎn)換成MapReduce任務執(zhí)行并存儲查詢結(jié)果;
步驟(6),對于海量的web日志數(shù)據(jù)進行數(shù)據(jù)分割;
步驟(7 ),應用高度并行的全局隨機化搜索的遺傳算法對數(shù)據(jù)進行分析挖掘;
步驟(8),將數(shù)據(jù)查詢與分析部分得出的數(shù)據(jù)裝載進Mysql數(shù)據(jù)庫中。
[0008]進一步的,所述步驟(4)中的優(yōu)化操作包括對傾斜的數(shù)據(jù)采用map join連接數(shù)據(jù)表,不傾斜的數(shù)據(jù)用普通的join連接數(shù)據(jù)表。
[0009]進一步的,所述步驟(5)中在map過程中引入組合函數(shù)combiner,實現(xiàn)本地key的聚合,對map輸出的key排序,value進行迭代。
[0010]進一步的,所述combiner函數(shù)設置在map產(chǎn)生的結(jié)果進行合并操作之前或之后運行。
[0011]與現(xiàn)有技術相比,本發(fā)明具有如下優(yōu)點和有益效果:
本發(fā)明針對海量web日志數(shù)據(jù),結(jié)合考慮存儲海量數(shù)據(jù)系統(tǒng)的可擴展性還有數(shù)據(jù)結(jié)構的非結(jié)構化,以及已有數(shù)據(jù)處理方法的優(yōu)缺點,基于Hadoop/Hive分布式系統(tǒng)的高性能計算和基于數(shù)據(jù)分割和遺傳算法的數(shù)據(jù)分析技術,有助于在海量的web日志數(shù)據(jù)的查詢與分析,實現(xiàn)精確地查詢和數(shù)據(jù)分析。例如,可以分析搜索引擎網(wǎng)站的日志數(shù)據(jù)得到用戶點擊順序跟URL的排名。本方法進行了 Hive優(yōu)化,彌補了以往只能簡單通過HBase直接進行行鍵的搜索和借助Hive的HQL進行檢索時延很大的缺點;同時,為采用數(shù)據(jù)分割分析,同時采用遺傳算法分析日志數(shù)據(jù)中的記錄,令數(shù)據(jù)分析結(jié)果更為準確。兩方面的結(jié)合,既能實現(xiàn)海量數(shù)據(jù)存儲查詢分析的可擴展性和高效性,也避免數(shù)據(jù)傾斜帶來的job分布不均整體性能下降的問題。相對于傳統(tǒng)的日志數(shù)據(jù)查詢分析方法,能使得進行日志數(shù)據(jù)分析查詢的公司或者客戶能準確的了解web情況,例如可以根據(jù)用戶點擊順序跟URL的排名找到熱門網(wǎng)站進行商戶的廣告投放。本發(fā)明實現(xiàn)了大數(shù)據(jù)的數(shù)據(jù)挖掘,例如可以實現(xiàn)web的推薦和電子商務的營銷。
【專利附圖】
【附圖說明】
[0012]圖1為本發(fā)明方法步驟流程示意圖;
圖2為網(wǎng)頁的鏈表結(jié)構圖。
【具體實施方式】
[0013]以下將結(jié)合具體實施例對本發(fā)明提供的技術方案進行詳細說明,應理解下述【具體實施方式】僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍。
[0014]客戶在瀏覽網(wǎng)站的過程中會留下它們訪問的痕跡,這些痕跡會以web日志文件的形式保存下來。本例即針對這些數(shù)據(jù),采用Hive中的ETL語言、優(yōu)化的Hive SQL查詢、弓丨入combiner函數(shù)的MapReduce、基于數(shù)據(jù)分割技術的遺傳算法來精確提供日志數(shù)據(jù)查詢與分析的結(jié)果。如圖1所示,本方法具體步驟如下:
步驟10,用Hive中的ETL對各個數(shù)據(jù)源的數(shù)據(jù)進行解析。ETL過程包括對數(shù)據(jù)進行提取、清洗、轉(zhuǎn)化和加載的四個步驟。提取階段將源數(shù)據(jù)解析出來存入Hive中,用Hadoop及Hive程序從源數(shù)據(jù)中抽取可能會用到的數(shù)據(jù)到Transform層;清洗階段基于Hive程序?qū)⒑罄m(xù)可能會使用到的字段提取出來存入Load層,拋棄掉不會用到的數(shù)據(jù)和重復數(shù)據(jù);加載階段就是將處理好的數(shù)據(jù)存入Hive中的表,并刪除源數(shù)據(jù)。但僅用ETL工具抽取數(shù)據(jù)不能滿足速度的要求,本發(fā)明針對數(shù)據(jù)的清洗過程采用MapReduce程序編寫,將每條數(shù)據(jù)進行讀取,抽取相應字段。處理原始數(shù)據(jù)時,采用MapReduce程序進行分布式清洗處理,在集群中設置一個NameNode (JobTracker)來擔任數(shù)據(jù)分發(fā)服務器,設置DataNode(TaskTracker)來存放并處理經(jīng)由NameNode分發(fā)的數(shù)據(jù)。NameNode將要處理的數(shù)據(jù)分成大小為128兆的塊,每個塊數(shù)據(jù)設置兩個備份,然后按照一定算法由Hadoop系統(tǒng)自行將塊數(shù)據(jù)存入DataNode即數(shù)據(jù)處理服務器里,進行數(shù)據(jù)的進一步處理。本步驟涉及到Hive及MapReduce的應用,它是建立在分布式文件系統(tǒng)HDFS基礎上的,隨后數(shù)據(jù)倉庫從多維度對海量數(shù)據(jù)進行建模,根據(jù)要求查詢或者分析數(shù)據(jù)。
[0015]步驟20,將經(jīng)步驟10解析過的數(shù)據(jù)存入數(shù)據(jù)倉庫Hive中設計并建好的表當中。Hive中的表的個數(shù)根據(jù)數(shù)據(jù)的實際情況設計,需要創(chuàng)建多個表,每個表創(chuàng)建流程大體相同。例如存儲Apache格式日志的表的字段:訪問者IP、瀏覽者標識、用戶名、訪問時間、訪問的方法、請求訪問的文檔等等。本發(fā)明建立一個關系數(shù)據(jù)庫metastore專門用來存儲表的元數(shù)據(jù)信息。
[0016]步驟30, Hive系統(tǒng)自帶的Driver接受HiveQL語句,掌管HiveQL語句的生命周期,包括對HiveQL語句的編譯、優(yōu)化和執(zhí)行,其具體過程如下:
步驟40,針對傾斜數(shù)據(jù)問題,對接受語句進行優(yōu)化,進行表連接(join)操作后得到初步的map結(jié)果:無效id在關聯(lián)時就會碰到數(shù)據(jù)傾斜的問題,比如每日約為20億的全網(wǎng)日志,其中的訪問者IP為主鍵,在日志收集過程中會丟失,出現(xiàn)主鍵為null的情況,如果取其中的訪問者IP和瀏覽者標示關聯(lián),就會碰到數(shù)據(jù)傾斜的問題。原因是Hive中,主鍵為null值的項會被當做相同的Key而分配進同一個計算map,會造成計算瓶頸。根據(jù)數(shù)據(jù)的分布符合社會學統(tǒng)計規(guī)律,傾斜的key不會太多,進行Hive查詢join語句時本發(fā)明進行優(yōu)化,傾斜的數(shù)據(jù)用map join,即對傾斜數(shù)據(jù)的主鍵進行一個分割,避免傾斜的主鍵全部分配進一個計算,進行分布式的表連接操作;不傾斜的數(shù)據(jù)用普通的join,即直接按主鍵進行表的連接操作,最終合并得到完整的結(jié)果。
[0017]步驟50,根據(jù)步驟40優(yōu)化得到的初步map結(jié)果,再用Driver調(diào)用編譯器Compiler,將接收到的HiveQL語句轉(zhuǎn)換成由MapReduce任務的DAG組成的策略,策略由元數(shù)據(jù)和HDFS操作組成,最后將任務以拓撲順序提交到執(zhí)行引擎上,完成數(shù)據(jù)的分析計算任務——即按照查詢條件進行分布式查詢。MapReduce的輸入來自于已經(jīng)導入到HDFS集群中的文件,這些文件均勻分布在所有節(jié)點中,運行一個MapReduce程序會首先在部分或者所有節(jié)點中運行mapping任務,所有mapping任務都是等價的,每個mapping任務都不會與其他mapping交換信息,也不會意識到其他mapping的存在,mapping階段完成后,節(jié)點之間產(chǎn)生的中間鍵值對可能會進行互相交換,將擁有相同key的值,例如同一個訪問者IP提交到同一個Reducer,整個MapReduce過程中,節(jié)點之間的互相通信就僅可能在這一步發(fā)生,與mapping任務一樣,reducing任務也不會與其他reducing任務互相通信,Hadoop MapReduce通過自動完成數(shù)據(jù)轉(zhuǎn)移和重啟失敗節(jié)點上的仟務來保證任務執(zhí)行的可靠性。在此基礎上,在map過程之后,reduce過程之前,我們還可以引入組合函數(shù)combiner,對map過程輸出的數(shù)據(jù)進行優(yōu)化,實現(xiàn)本地key的聚合,對map輸出的key排序,value進行迭代;map過程中對產(chǎn)生的數(shù)據(jù)會進行一個合并merge的操作,將產(chǎn)生的數(shù)據(jù)按主鍵合并,combiner函數(shù)還可以根據(jù)需要設置在map產(chǎn)生的結(jié)果進行merge之前還是之后運行,尤其是大量結(jié)果時,大大的減少map任務對Reduce任務的數(shù)據(jù)拷貝。
[0018]步驟60,對數(shù)據(jù)進行分割:首先將測試樣本集平均分割成Μ份(由InputFormat負責將數(shù)據(jù)塊劃分為InputSplit),并對數(shù)據(jù)格式進行統(tǒng)一(格式化為〈id,〈X,Y>>,其中,id代表由訪問者IP和訪問日期組成的編號;Y代表用戶當前訪問的頁面;X代表參照,即用戶在訪問頁面Υ之前停留的頁面。然后,map操作是對輸入的每個記錄進行掃描,將數(shù)據(jù)集按照上述格式進行初始化;經(jīng)過map操作后,得到中間結(jié)果〈〈X,Y>,1>,即有一個用戶從頁面Υ訪問了頁面X ;Reduce操作則將中間結(jié)果按照具有相同<X,Y>的頁面跳轉(zhuǎn)訪問方式進行合并得到輸出結(jié)果〈0(3>,11>,其中,11代表訪問路徑X—〉Υ的頻度。其次,每個子群體(即前述分割得到的數(shù)據(jù)塊)分別將Reduce操作的結(jié)果轉(zhuǎn)換為鏈表結(jié)構,鏈表頭部保存k值。鏈表結(jié)構圖如圖2所示,其中,k代表染色體也就是鏈表長度;X,Y,Z,R代表網(wǎng)頁。
[0019]步驟70,應用高度并行的全局隨機化搜索的遺傳算法子群體內(nèi)部進行選擇、交叉等遺傳進化操作:首先從父代染色體中隨機選擇2條染色體,然后隨機生成插入位置Ins、刪除位置Del、插入刪除長度Len。接著比較2段染色體是否等長,如果相等,則判斷頭尾是否有重合,有,則連接生成新的染色體,否則,不生成子代染色體;如果不等長,則判斷插入和刪除的2段基因是否相同,如果相同,則合并為一條染色體作為新的染色體,否則,不生成子代染色體。當遺傳代數(shù)為50的倍數(shù)時,群體間進行聯(lián)姻操作。每個子群體一直重復上述操作,直到k值不再變化,當遺傳代數(shù)為50的倍數(shù)時,群體間進行聯(lián)姻操作。每個子群體一直重復上述操作,直到k值不再變化,退出遺傳算法。通過上述操作可以得到一個頁面的訪問路徑,而且處理的Web日志文件大小不會影響算法的有效性。
[0020]上述步驟70和80在數(shù)據(jù)分析過程中將數(shù)據(jù)分割技術和遺傳算法結(jié)合起來,專門用于Hadoop /Hive集群環(huán)境中的Web日志分析。
[0021]步驟80,將數(shù)據(jù)查詢與分析部分得出的數(shù)據(jù)裝載進Mysql數(shù)據(jù)庫中,按照需求將數(shù)據(jù)分析的結(jié)果以友好界面形式展示給用戶。例如,某個站點、頁面、數(shù)據(jù)中心訪問次數(shù)的查詢,訪客情況的分析,其他比如對于某一 web頁面來說過去某一段時間內(nèi)訪問失敗的比例,或者用戶點擊順序跟URL的排名,都可以查詢分析出來。
[0022]本發(fā)明方案所公開的技術手段不僅限于上述實施方式所公開的技術手段,還包括由以上技術特征任意組合所組成的技術方案。應當指出,對于本【技術領域】的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發(fā)明的保護范圍。
【權利要求】
1.一種海量web日志數(shù)據(jù)查詢與分析方法,其特征在于,包括如下步驟: 步驟(1),用Hive中的ETL對各個數(shù)據(jù)源的數(shù)據(jù)進行解析,解析過程包括提取、清洗、轉(zhuǎn)化和加載四個步驟,在對數(shù)據(jù)進行清洗時,將其中的有用信息用MapReduce程序進行分布式抽取處理; 步驟(2),將抽取出來的數(shù)據(jù)裝載進數(shù)據(jù)倉庫中; 步驟(3), Hive的部件Driver接收HiveQL語句; 步驟(4),針對傾斜數(shù)據(jù)對接受語句進行優(yōu)化,進行表連接操作后得到初步的map結(jié)果; 步驟(5),將接收到的HiveQL語句轉(zhuǎn)換成MapReduce任務執(zhí)行并存儲查詢結(jié)果; 步驟(6),對于海量的web日志數(shù)據(jù)進行數(shù)據(jù)分割; 步驟(7 ),應用高度并行的全局隨機化搜索的遺傳算法對數(shù)據(jù)進行分析挖掘; 步驟(8),將數(shù)據(jù)查詢與分析部分得出的數(shù)據(jù)裝載進Mysql數(shù)據(jù)庫中。
2.根據(jù)權利要求1所述的海量web日志數(shù)據(jù)查詢與分析方法,其特征在于:所述步驟(4)中的優(yōu)化操作包括對傾斜的數(shù)據(jù)采用map join連接數(shù)據(jù)表,不傾斜的數(shù)據(jù)用普通的join連接數(shù)據(jù)表。
3.根據(jù)權利要求1或2所述的海量web日志數(shù)據(jù)查詢與分析方法,其特征在于:所述步驟(5)中在map過程中引入組合函數(shù)combiner,實現(xiàn)本地key的聚合,對map輸出的key排序,value進行迭代。
4.根據(jù)權利要求3所述的海量web日志數(shù)據(jù)查詢與分析方法,其特征在于:所述combiner函數(shù)設置在合并操作產(chǎn)生的結(jié)果進行合并之前或之后運行。
【文檔編號】G06F17/30GK104298771SQ201410596395
【公開日】2015年1月21日 申請日期:2014年10月30日 優(yōu)先權日:2014年10月30日
【發(fā)明者】馬廷淮, 瞿晶晶, 田偉, 薛羽, 曹杰 申請人:南京信息工程大學