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