摘 要 隨著網(wǎng)絡(luò)應(yīng)用的普及和網(wǎng)絡(luò)的深入發(fā)展,網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)量越來(lái)越大,在網(wǎng)絡(luò)安全管理方面要求越來(lái)越嚴(yán)格,如何有效的存儲(chǔ)、查詢、分析海量的網(wǎng)絡(luò)日志就成了網(wǎng)絡(luò)安全管理方面的新挑戰(zhàn)。云計(jì)算技術(shù)的完善和普及,為解決這類問(wèn)題提供了新的方法,云計(jì)算機(jī)就是通過(guò)網(wǎng)絡(luò)系統(tǒng)將多臺(tái)計(jì)算機(jī)組成一個(gè)分布式系統(tǒng),從而完成海量數(shù)據(jù)的存儲(chǔ)和計(jì)算。Hadoop是一個(gè)用于構(gòu)建云計(jì)算機(jī)平臺(tái)的開源系統(tǒng),為了存儲(chǔ)和分析這些海量的數(shù)據(jù),可以利用Hadoop分布系統(tǒng)下對(duì)網(wǎng)絡(luò)日志的存儲(chǔ)、查詢、分析,通過(guò)該系統(tǒng)的應(yīng)用可以節(jié)約存儲(chǔ)成本、提高查詢效率,為網(wǎng)絡(luò)的安全管理、網(wǎng)絡(luò)優(yōu)化提供數(shù)據(jù)支持。
【關(guān)鍵詞】Hadoop 大數(shù)據(jù) Hive
1 引言
隨著網(wǎng)絡(luò)應(yīng)用的深度普及,人們?cè)趯W(xué)習(xí)、工作、生活越來(lái)越離不開網(wǎng)絡(luò),所以在網(wǎng)絡(luò)的運(yùn)行過(guò)程中,會(huì)產(chǎn)生海量的網(wǎng)絡(luò)日志,如何通過(guò)海量的日志,來(lái)分析用用戶上網(wǎng)行的特點(diǎn),為校園網(wǎng)絡(luò)的優(yōu)化、網(wǎng)絡(luò)安全、提供科學(xué)決策的依據(jù),我們首先要解決的問(wèn)題是如何存存儲(chǔ)、查詢、分析這些大數(shù),如果用傳統(tǒng)的單一節(jié)點(diǎn)的計(jì)算機(jī)能力來(lái)處理這些海量的數(shù)據(jù)已經(jīng)不能滿足需求。利用云計(jì)算技術(shù),通過(guò)一定的算法,可以把這些大數(shù)據(jù)進(jìn)進(jìn)行清洗、存儲(chǔ)、分析,為校園網(wǎng)絡(luò)安全運(yùn)行提供數(shù)據(jù)支持,本文通過(guò)Hadoop系統(tǒng),實(shí)現(xiàn)了基于Hive數(shù)據(jù)倉(cāng)庫(kù)的網(wǎng)絡(luò)日志行為的存儲(chǔ)和分析。
2 主要相關(guān)技術(shù)
2.1 hadoop系統(tǒng)
Hadoop是應(yīng)用于大規(guī)模數(shù)據(jù)的開發(fā)和運(yùn)行處理的軟件平臺(tái),是Appach的一個(gè)用java語(yǔ)言實(shí)現(xiàn)開源軟件框架,實(shí)現(xiàn)了在大量計(jì)算機(jī)組成的集群中對(duì)海量數(shù)據(jù)進(jìn)行分布式計(jì)算,Hadoop框架中最核心設(shè)計(jì)就是:HDFS和MapReduce,HDFS提供了海量數(shù)據(jù)的存儲(chǔ),MapReduce提供了對(duì)數(shù)據(jù)的計(jì)算。
2.2 Hive數(shù)據(jù)倉(cāng)庫(kù)
Hive是運(yùn)行于Hadoop下的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供類SQL查詢功能。Hive 的本質(zhì)是將SQL轉(zhuǎn)換為MapReduce程序,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供完整的sql查詢功能,可以將sql語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行。并按照該計(jì)劃生成MapReduce任務(wù)后交給Hadoop集群處理,Hive的體系結(jié)構(gòu)可以分為以下部分:
(1)用戶接口,Hive主要有三個(gè)用戶接口,分別為:命令接品(CLI)、Jdbc/Odbc接口、WEB接口。
(2)Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,如mysql, Hive中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等。
(3)解釋器、編譯器、優(yōu)化器完成HQL查詢語(yǔ)句從詞法分析、語(yǔ)法分析、編譯、優(yōu)化以及查詢計(jì)劃的生成。生成的查詢計(jì)劃存儲(chǔ)在HDFS中,并在隨后有MapReduce調(diào)用執(zhí)行。
(4)Hive的數(shù)據(jù)存儲(chǔ)在HDFS中,大部分的查詢、計(jì)算由MapReduce完成, Hive將元數(shù)據(jù)存儲(chǔ)在RDBMS中。
3 存儲(chǔ)和分析網(wǎng)絡(luò)日志
3.1 利用hive存儲(chǔ)網(wǎng)絡(luò)日志
3.1.1 數(shù)據(jù)采集及格式
測(cè)試的數(shù)據(jù)來(lái)源于校園網(wǎng)絡(luò)用戶上網(wǎng)行為記錄的日志,該日的特點(diǎn)是實(shí)時(shí)記錄了認(rèn)證用戶訪問(wèn)網(wǎng)絡(luò)的行為,記錄數(shù)據(jù)量非常大,每天將近有30G,每條記錄包含如下信息:流水號(hào)、訪問(wèn)時(shí)間、訪問(wèn)的目標(biāo)url或IP、登錄賬號(hào)、源MAC、源IP、目標(biāo)端口、訪問(wèn)類型、訪問(wèn)目標(biāo)IP、源端口,其格式為TXT文件,日志記錄的信息可以分析校園網(wǎng)絡(luò)的運(yùn)行情況、用戶上網(wǎng)行為特點(diǎn)及網(wǎng)絡(luò)輿情的監(jiān)控。
3.1.2 數(shù)據(jù)的存儲(chǔ)
用戶在校園網(wǎng)絡(luò)上每一個(gè)動(dòng)作都會(huì)產(chǎn)生一條記錄,所以經(jīng)過(guò)長(zhǎng)時(shí)間的網(wǎng)絡(luò)運(yùn)行,這些海量的數(shù)據(jù)查詢存儲(chǔ)就成為一個(gè)必須解決的問(wèn)題,如果用傳統(tǒng)的數(shù)據(jù)庫(kù)如:MSsql、mysql、orc等,就顯得力不從心.如果這些數(shù)據(jù)不加以分析利用,就失去了它的價(jià)值,根據(jù)Hive的特點(diǎn),可以將網(wǎng)絡(luò)日志存儲(chǔ)在Hive數(shù)據(jù)倉(cāng)庫(kù)中,利用Hadoop分布式計(jì)算提高數(shù)據(jù)的運(yùn)算速度,其存儲(chǔ)的過(guò)程設(shè)計(jì)如圖1所示。
整個(gè)流程的工作過(guò)程:
(1)原始記錄獲取,可以通過(guò)網(wǎng)關(guān)設(shè)備或認(rèn)證服務(wù)器獲取原始數(shù)據(jù),在原始的數(shù)據(jù)中包含了許多干擾的數(shù)據(jù),所以必須對(duì)數(shù)據(jù)進(jìn)行處理。
(2)數(shù)據(jù)清洗,我們可以利簡(jiǎn)單的python腳本語(yǔ)言進(jìn)行數(shù)據(jù)的清洗,提取對(duì)我們分析數(shù)據(jù)有用的信息,如用戶賬號(hào)、登時(shí)間、注銷時(shí)間、在線時(shí)長(zhǎng)、源IP地址、源MAC地址、目標(biāo)IP、訪問(wèn)類型等,經(jīng)過(guò)清洗的數(shù)據(jù)大小只是原來(lái)的二分之一,把原始數(shù)據(jù)分別存為兩個(gè)hive能夠?qū)氲腡XT文件,這兩個(gè)文件分別存有用戶登陸校園網(wǎng)絡(luò)的信息和用戶訪問(wèn)網(wǎng)絡(luò)行為記錄。
(3)建立hive數(shù)據(jù)倉(cāng)庫(kù),可以使用hive提供的CLI接口,編寫相應(yīng)的shell腳本進(jìn)行批量的導(dǎo)入,也可以使用hive提供的API接口,通過(guò)編寫程序進(jìn)行導(dǎo)入,其實(shí)現(xiàn)如下:
方法一、選擇最簡(jiǎn)單的CLI接口,首選在Linux 創(chuàng)建如下腳本:
#!/bin/bash
hive< create external tableuserlog(id string) row format delimited fields terminated by'\t' lines terminated by'\n' stored as textfile; load data local inpath'/home/hadoop/hd/test*.txt' into table test_1; EOF 以上的shell腳本功能實(shí)現(xiàn)了在hive上創(chuàng)建用戶登陸網(wǎng)絡(luò)信息記錄表,并把相應(yīng)的記錄文件導(dǎo)入到hive數(shù)據(jù)倉(cāng)庫(kù)中,我可以應(yīng)用相同的方法在hive中創(chuàng)網(wǎng)絡(luò)用戶行為記錄user_activit表。
方法二,可以用編寫程序的方式實(shí)現(xiàn),例如用python程序?qū)崿F(xiàn)的操作。
以上兩種方法的最終目的是把數(shù)據(jù)存儲(chǔ)到hive數(shù)據(jù)倉(cāng)庫(kù)中,通過(guò)比較方法一操作簡(jiǎn)單執(zhí)行效率高。
3.2 利用Hive數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行網(wǎng)絡(luò)日志的分析
Hive數(shù)據(jù)倉(cāng)庫(kù)的特點(diǎn)是基于hadoop系統(tǒng)之上的數(shù)據(jù)庫(kù),并將SQL轉(zhuǎn)換為MapReduce程序,hive不適合用于聯(lián)機(jī)online事務(wù)處理,也不提供實(shí)時(shí)查詢功能。它最適合應(yīng)用在基于大量不可變數(shù)據(jù)的批處理作業(yè),所以可以用hive來(lái)分析大數(shù)據(jù),在校園網(wǎng)絡(luò)環(huán)境中,由于長(zhǎng)時(shí)間的運(yùn)行,產(chǎn)生了大量的日志,如果我們用傳統(tǒng)的數(shù)據(jù)庫(kù)工具只能存儲(chǔ)部分?jǐn)?shù)據(jù),對(duì)于分析網(wǎng)絡(luò)的運(yùn)行情況及關(guān)鍵數(shù)據(jù)的查尋就會(huì)變得非常困難和耗時(shí)。所以我可以利用hive數(shù)據(jù)工具對(duì)網(wǎng)絡(luò)行為的分析,在hive中提供了類似sql的操作。
3.2.1 在網(wǎng)絡(luò)安全管理中查詢
在網(wǎng)絡(luò)安全分析中我們可以利用Hive的SQL語(yǔ)句進(jìn)行查詢,例如某個(gè)網(wǎng)址或IP地址是否被學(xué)生大量訪問(wèn),我們要及時(shí)了解學(xué)生的思想狀況及形為表現(xiàn),就可以利用hive查詢分析大量的網(wǎng)絡(luò)日志并對(duì)其進(jìn)行思想教育,或者我們查詢非法IP地址在一個(gè)星期內(nèi)被訪問(wèn)的情況,可以在hive的CL下輸入語(yǔ)句:selecuserId,usertim,fromuserlog where ip=“a.b.c.d”and usetime=”x”就可以查詢到我們想要的結(jié)果。
3.2.2 在網(wǎng)絡(luò)帶寬的優(yōu)化
為了提高網(wǎng)絡(luò)的服務(wù)質(zhì)量,我們可以從網(wǎng)絡(luò)日志中,通過(guò)hive的內(nèi)置窗口函數(shù)進(jìn)行分區(qū)排序、動(dòng)態(tài)Group by、Top N 、累計(jì)計(jì)算、層次查詢,可以統(tǒng)計(jì)和分析某段時(shí)間內(nèi)被大量訪問(wèn)的目標(biāo)地址和提供的服服類型,例如視頻服務(wù)網(wǎng)站,我們就可通增加緩存服務(wù)器,提高訪問(wèn)速度,減輕出口帶寬的壓力。
3.2.3 為進(jìn)一步數(shù)據(jù)挖掘提供數(shù)據(jù)
在hive中內(nèi)置了大量的分析函數(shù),可以根據(jù)需要的數(shù)據(jù)內(nèi)容來(lái)選擇相應(yīng)的操作,為我們數(shù)據(jù)深度分析面提供有用的數(shù)據(jù),例如可以通行列轉(zhuǎn)的函數(shù)得到某個(gè)用戶一分鐘內(nèi)訪問(wèn)網(wǎng)址的記錄,為下一步運(yùn)用mouht進(jìn)行用戶行為深度分析分析提供準(zhǔn)確的數(shù)據(jù)。
3.3 實(shí)驗(yàn)環(huán)境搭建
為了驗(yàn)證Hive數(shù)據(jù)倉(cāng)庫(kù)的可行性,所搭建的實(shí)驗(yàn)環(huán)境為:
(1)硬件環(huán)境:CPU: 四個(gè)Intel 8核Xeon E7-4820處理器,內(nèi)存128G,硬盤空間3T。
(2)虛擬機(jī)系統(tǒng):基于VMWare ESXI5.0 創(chuàng)建5臺(tái)虛擬,每臺(tái)的配置為:2個(gè)雙核CPU,8G內(nèi)存,60G硬盤,ubuntu14.04操作系統(tǒng)。
(3)Hadoop/hive集群:5臺(tái)虛擬機(jī)都安裝Hadoop2.6.0,其中的一臺(tái)用來(lái)作為HDFS的名稱節(jié)點(diǎn),并安裝Hive-1.2.1,其余4臺(tái)作為數(shù)據(jù)節(jié)點(diǎn)。
3.3.1 數(shù)據(jù)的存儲(chǔ)驗(yàn)證
在Hadoop集群的主節(jié)點(diǎn)下利用Hive提供的CLI接口,將網(wǎng)絡(luò)用戶一個(gè)星期的日志導(dǎo)入到Hive數(shù)據(jù)倉(cāng)庫(kù)中,經(jīng)過(guò)驗(yàn)證在hive 數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)勻可以正常操作,如圖2運(yùn)行。
通過(guò)圖2所示,Hive 能在hadoop中把SQL命令解析為并生23個(gè)Map和25個(gè)Reduce任務(wù)后交給Hadoop集群處理,所以經(jīng)過(guò)驗(yàn)證,利用Hive 存儲(chǔ)網(wǎng)絡(luò)用戶日志的方案是可行的。
3.3.2 數(shù)據(jù)的分析驗(yàn)證
在hive中統(tǒng)計(jì)每天點(diǎn)擊率最高的網(wǎng)站,可以在hive的命令接口中輸入如下的命令:
Select usetime,usIP,count(*),C from userlog group by usetimeusIP>>dt.txt
以上命令執(zhí)行后會(huì)生成一個(gè)結(jié)果文件,如圖3所示。
用以上的分析方法分別對(duì)不同大小的數(shù)據(jù)進(jìn)行驗(yàn)證,圖4是運(yùn)行時(shí)間對(duì)比。
從以上結(jié)果可以看出,hive 對(duì)小文件操作時(shí),延時(shí)性比較大,但是對(duì)大文件的作操作時(shí),他的優(yōu)勢(shì)就發(fā)揮出來(lái)。
4 結(jié)語(yǔ)
本文結(jié)合具體的實(shí)例,運(yùn)用Hadoop系統(tǒng)下的Hive數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行存儲(chǔ)校園網(wǎng)絡(luò)用戶上網(wǎng)行為的大量日志,通過(guò)驗(yàn)證Hive 數(shù)據(jù)倉(cāng)庫(kù)可以應(yīng)用于校園網(wǎng)絡(luò)數(shù)據(jù)非時(shí)實(shí)交互的應(yīng)用環(huán)境,并且利用hive 分析數(shù)據(jù),可以省設(shè)計(jì)程序代碼的復(fù)雜的工作,提高我們分?jǐn)?shù)據(jù)的效率,能夠從大量的網(wǎng)絡(luò)日志中取有用的數(shù)據(jù),使其成為學(xué)校貴的數(shù)字資產(chǎn)。
參考文獻(xiàn)
[1]林和,安王強(qiáng).云計(jì)算與云計(jì)算[EB/OL]ttp://www.linkwan.com/gb/tech/htm/1490.htm,2011.
[2]吳朝暉,陳華鈞.空間大數(shù)據(jù)信息基礎(chǔ)設(shè)施[M].浙江:浙江大學(xué)出版社,2013(01):38.
[3]陸嘉恒.Hadoop實(shí)戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2012(11):2.
[4]張良均,樊哲.Hadoop大數(shù)據(jù)分析與挖掘?qū)崙?zhàn)[M].北京:機(jī)械工業(yè)出版社,2015(12):34.
作者簡(jiǎn)介
楊丕仁(1979-),男,云南省云縣人。現(xiàn)工作于大理大學(xué)現(xiàn)代教育技術(shù)中心,實(shí)驗(yàn)師、碩士。主要研究方向?yàn)榫W(wǎng)絡(luò)安全與管理。
作者單位
大理大學(xué)現(xiàn)代教育技術(shù)中 心云南省大理白族自治州大理市 671003