• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      利用日志文件實(shí)現(xiàn)Hive用戶(hù)操作行為還原

      2019-11-12 02:01:26羅文華王志銘
      關(guān)鍵詞:數(shù)據(jù)表日志檢索

      羅文華 王志銘

      (中國(guó)刑事警察學(xué)院網(wǎng)絡(luò)犯罪偵查系 遼寧 沈陽(yáng) 110035)

      1 引言

      隨著移動(dòng)設(shè)備的普及和互聯(lián)網(wǎng)業(yè)務(wù)的創(chuàng)新發(fā)展,各行各業(yè)產(chǎn)生的數(shù)據(jù)日益增長(zhǎng)并不斷累積。這些海量數(shù)據(jù)的產(chǎn)生推動(dòng)了高性能云平臺(tái)的發(fā)展,而Hadoop是眾多云框架中較成熟、使用較廣的架構(gòu)[1]。Hadoop使用數(shù)據(jù)倉(cāng)庫(kù)Hive存儲(chǔ)海量的、非結(jié)構(gòu)化的數(shù)據(jù)。運(yùn)營(yíng)人員可以通過(guò)Hive存儲(chǔ)的海量數(shù)據(jù)挖掘出大量含有巨大價(jià)值的信息。因此在取證方面,針對(duì)Hive的取證工作至關(guān)重要,對(duì)于Hive取證工作的研究不僅可以遏制犯罪行為的繼續(xù),還能及時(shí)幫助企業(yè)、部門(mén)挽回?zé)o法估量的損失。

      Hive與傳統(tǒng)數(shù)據(jù)庫(kù)[2]不論是在底層框架還是數(shù)據(jù)結(jié)構(gòu)上都是大相徑庭的,在取證方面唯一共通點(diǎn)就是都依賴(lài)系統(tǒng)日志及各種元數(shù)據(jù)。國(guó)內(nèi)外在Hive取證工作尤其是用戶(hù)操作行為還原方面的研究極少,因此本文通過(guò)分析HDFS元數(shù)據(jù)、Hive日志及Hadoop系統(tǒng)服務(wù)輸出日志,構(gòu)建Hive各層之間的邏輯關(guān)系,實(shí)現(xiàn)依據(jù)具體線索信息減少取證工作量,并通過(guò)多維證據(jù)的相互印證提高證明效力。

      2 Hive存儲(chǔ)邏輯關(guān)系

      Hive整體的系統(tǒng)構(gòu)架在運(yùn)營(yíng)層面來(lái)看可以分為元數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)兩部分,但在用戶(hù)行為還原角度可以分為用戶(hù)層、文件層和物理層。具體結(jié)構(gòu)如圖1所示。

      用戶(hù)層即用戶(hù)進(jìn)行Hive操作直接對(duì)應(yīng)的層面。首先用戶(hù)通過(guò)接口將操作發(fā)送給命令解釋模塊driver,driver會(huì)將命令進(jìn)行解釋?zhuān)缓蠼挥晌募犹幚?。元?shù)據(jù)庫(kù)單獨(dú)存放于metastore中,由傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行管理,通常為mysql,而數(shù)據(jù)就存儲(chǔ)于Hive數(shù)據(jù)倉(cāng)庫(kù)中。在用戶(hù)操作期間會(huì)在Hive日志中詳細(xì)記錄。文件層Hadoop將用戶(hù)層driver模塊解釋的命令分解成多個(gè)任務(wù)發(fā)送給Hadoop的從節(jié)點(diǎn)DataNode,并將數(shù)據(jù)存儲(chǔ)于Hadoop的分布式文件系統(tǒng)HDFS中,而HDFS的元數(shù)據(jù)fsimage與edit負(fù)責(zé)進(jìn)行文件的管理和記錄。物理層即搭建Hadoop框架為基礎(chǔ)的底層Linux操作系統(tǒng)及其文件系統(tǒng),HDFS架構(gòu)基于特定的節(jié)點(diǎn)結(jié)構(gòu),主要包括NameNode和DataNode。HDFS通過(guò)塊的方式存儲(chǔ)文件,對(duì)應(yīng)到底層Linux文件系統(tǒng)就是經(jīng)過(guò)名稱(chēng)編號(hào)大小相同的文件。圖2表示用戶(hù)操作行為引起Hive3層文件變化的過(guò)程及記錄變化的日志或元數(shù)據(jù)。

      圖1 Hive系統(tǒng)構(gòu)架圖

      圖2 用戶(hù)操作行為對(duì)應(yīng)的文件變化

      要進(jìn)行用戶(hù)操作行為還原,就必須通過(guò)構(gòu)建用戶(hù)層、文件層及物理層的邏輯關(guān)系,以準(zhǔn)確地識(shí)別用戶(hù)操作行為涉及的邏輯文件和塊,取證人員可通過(guò)3層邏輯關(guān)系進(jìn)行有針對(duì)性的數(shù)據(jù)恢復(fù)和證據(jù)固定。

      2.1 用戶(hù)層與文件層的邏輯關(guān)系

      建立用戶(hù)層與文件層的邏輯關(guān)系,即如何通過(guò)用戶(hù)操作行為找到操作所影響的文件層面的文件。用戶(hù)的操作會(huì)導(dǎo)致HDFS文件屬性的變化,并被Hive日志和元數(shù)據(jù)記錄。因此用戶(hù)層與文件層邏輯關(guān)系的建立可分為通過(guò)Hive日志獲取相關(guān)數(shù)據(jù)庫(kù)的HDFS路徑信息和通過(guò)元數(shù)據(jù)庫(kù)獲取相關(guān)數(shù)據(jù)庫(kù)的HDFS路徑兩種方法。

      (1)通過(guò)Hive日志獲取數(shù)據(jù)庫(kù)線索。因不同平臺(tái)環(huán)境下的Hive日志設(shè)置不同[3],取證人員可以通過(guò)Hive根目錄conf目錄下的屬性文件hive-log4j2.properties來(lái)查看Hive日志的存放路徑。文件具體內(nèi)容如表1所示。

      表1 hive-log4j2.properties主要內(nèi)容

      Hive日志會(huì)在達(dá)到系統(tǒng)設(shè)定的閾值后自動(dòng)保存成名為“property.hive.log.file+日期”的舊Hive日志文件,并生成名為“property.hive.log.file”的新Hive日志,其中包含了大量用戶(hù)操作的時(shí)間信息、具體操作內(nèi)容及系統(tǒng)自動(dòng)輸出的記錄。Hive日志中包含用戶(hù)所有操作命令、過(guò)程及系統(tǒng)反饋等信息,取證人員可以將“command”作為關(guān)鍵字進(jìn)行用戶(hù)操作所有命令的檢索(生產(chǎn)環(huán)境需要數(shù)據(jù)清洗) ,也可以將“create”作為關(guān)鍵字檢索創(chuàng)建表的記錄。在用戶(hù)命令中就包括數(shù)據(jù)表的名稱(chēng)、創(chuàng)建時(shí)間及操作涉及到的HDFS路徑等信息。在時(shí)間信息中mtime參數(shù)極為關(guān)鍵,只要進(jìn)行了數(shù)據(jù)表內(nèi)數(shù)據(jù)的增刪改操作,都會(huì)使此表在HDFS中的mtime發(fā)生變化,因此mtime是邏輯關(guān)系建立的關(guān)鍵之一。Hive日志中的時(shí)間以太平洋時(shí)間的形式記錄,而在HDFS的元數(shù)據(jù)中以時(shí)間戳的形式保存。關(guān)于日志中的HDFS路徑信息極為詳細(xì),但是不排除日志被清除的可能,因此還有必要通過(guò)Hive元數(shù)據(jù)庫(kù)提取HDFS路徑信息。

      (2)通過(guò)元數(shù)據(jù)庫(kù)建立邏輯關(guān)系。Hive元數(shù)據(jù)是存儲(chǔ)在 Hive 中的數(shù)據(jù)的描述信息。Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,默認(rèn)使用derby維護(hù),但只能實(shí)現(xiàn)單用戶(hù)模式,而且存儲(chǔ)目錄不固定,不方便管理。因此在生產(chǎn)環(huán)境中是以Mysql來(lái)管理元數(shù)據(jù)庫(kù)數(shù)據(jù)的。元數(shù)據(jù)庫(kù)中共有53個(gè)表,但涉及用戶(hù)層與文件層邏輯關(guān)系建立僅需要DBS、TBLS和SDS 3個(gè)表所存的數(shù)據(jù)進(jìn)行結(jié)合,這也提高了通過(guò)元數(shù)據(jù)庫(kù)建立用戶(hù)層與文件層邏輯關(guān)系的可行性。

      在串聯(lián)DBS、TBLS和SDS時(shí)應(yīng)以TBLS為核心,因?yàn)門(mén)BLS中的DB_ID、SD_ID可以分別串聯(lián)表DBS與SDS。整個(gè)邏輯關(guān)系建立及后期數(shù)據(jù)塊識(shí)別過(guò)程中涉及DBS、TBLS和SDS內(nèi)字段如表2所示。其中包括表創(chuàng)建時(shí)間、數(shù)據(jù)輸入輸出格式等字段。

      表2 元數(shù)據(jù)表關(guān)鍵字段及描述

      構(gòu)建用戶(hù)層與文件層的邏輯關(guān)系除了通過(guò)Hive日志和Hive元數(shù)據(jù)庫(kù)以外,還可以通過(guò)HQL中的desc命令及Hadoop的Web管理頁(yè)面通過(guò)文件瀏覽的方式查詢(xún),但這些方式都是基于Hive元數(shù)據(jù)和HDFS元數(shù)據(jù)進(jìn)行查詢(xún)的,故在此不做詳解。

      2.2 文件層與物理層的邏輯關(guān)系

      建立文件層與物理層的邏輯關(guān)系,即通過(guò)HDFS路徑找到HDFS存儲(chǔ)文件對(duì)應(yīng)在物理層的文件塊block的ID。除了之前提到的Hadoop的管理Web頁(yè)面可以直接獲取相關(guān)內(nèi)容以外,還可以使用Hadoop命令達(dá)到同樣目的,但歸根結(jié)底還是HDFS元數(shù)據(jù)文件edit和fsimage中內(nèi)容的可視化。通過(guò)Hadoop命令行的方式可以將HDFS路徑(HDFS_dir)下所有文件對(duì)應(yīng)的block全部列舉出來(lái),具體命令格式hdfsfsckHDFS_dir-files-block。HDFS是依據(jù)元數(shù)據(jù)進(jìn)行管理的,沒(méi)有edit和fsimage整個(gè)HDFS也是無(wú)法使用的,因此最根本的邏輯關(guān)系建立的途徑依然是通過(guò)解析HDFS元數(shù)據(jù)edit與fsimage。

      (1)通過(guò)HDFS元數(shù)據(jù)建立HDFS文件與block邏輯關(guān)系。edit日志對(duì)HDFS的每次修改進(jìn)行連續(xù)記錄。為每個(gè)修改分配唯一的、單調(diào)增加的事務(wù)ID。在給定時(shí)間間隔內(nèi)啟動(dòng)Hadoop或觸發(fā)檢查點(diǎn)時(shí),NameNode會(huì)將最新的fsimage與edit日志之后記錄的所有事務(wù)合并,以創(chuàng)建新的事務(wù)并刪除過(guò)期的fsimage。edit日志保存了自最后一次檢查點(diǎn)之后所有針對(duì)HDFS文件系統(tǒng)的所有更新操作。如創(chuàng)建文件、重命名文件、移動(dòng)文件、刪除目錄等。

      fsimage維護(hù)命名空間的結(jié)構(gòu)和文件的屬性。例如所有權(quán)、訪問(wèn)權(quán)限、時(shí)間戳和分配的塊等。HDFS支持邏輯上由inode表示的文件層次結(jié)構(gòu)。fsimage維護(hù)著HDFS整個(gè)目錄樹(shù),HDFS文件的元數(shù)據(jù)通過(guò)inode存儲(chǔ)在fsimage中[4]。fsimage與edit需轉(zhuǎn)換為XML格式可查看,XML形式的fsimage文件結(jié)構(gòu)如圖3所示。

      圖3 fsimage元文件結(jié)構(gòu)

      在fsimage的Path中包含標(biāo)簽inode、id、type和name,其中name即文件名。在blockid中包含標(biāo)簽block、id,其中id就是block的id。取證人員在獲取HDFS路徑線索只有通過(guò)文件名在多個(gè)fsimage中檢索,即可找到block的id,之前提到過(guò)的mtime在此也可起到block篩選的作用,大幅度減少取證人員的工作量。

      (2)通過(guò)Hadoop系統(tǒng)服務(wù)輸出日志驗(yàn)證。在以Hadoop框架為基礎(chǔ)的云環(huán)境中的日志多種多樣,總體上可分為兩大類(lèi),即Hadoop系統(tǒng)服務(wù)輸出日志和Mapreduce輸出日志[5]。

      Hadoop系統(tǒng)服務(wù)輸出的日志默認(rèn)存放路徑為${HADOOP_HOME}/logs目錄下,默認(rèn)文件后綴為“l(fā)og”;當(dāng)日志達(dá)到系統(tǒng)設(shè)定的閾值后將會(huì)切割出新的文件,切割出的文件名格式為“XXX.log.num”,后邊的num數(shù)字越大,表示日志保存時(shí)間越早。系統(tǒng)默認(rèn)保存近20個(gè)日志。日志的格式為一行一條,依次描述為日期、時(shí)間、類(lèi)別、相關(guān)類(lèi)和提示信息。其中類(lèi)別“INFO BlockStateChange”表示文件邏輯塊狀態(tài)的變化,與操作行為密切相關(guān),是驗(yàn)證文件層與物理層的關(guān)鍵信息。

      取證人員在通過(guò)建立3層的邏輯關(guān)系后最終可以在HDFS元數(shù)據(jù)中獲取到block的id,在使用Hadoop系統(tǒng)服務(wù)輸出日志中需要使用到的信息為mtime與block的id,驗(yàn)證過(guò)程分為兩步進(jìn)行。第一步是將HDFS元數(shù)據(jù)中的mtime轉(zhuǎn)為太平洋時(shí)間在Hadoop系統(tǒng)服務(wù)輸出日志中檢索,將block的id設(shè)為關(guān)鍵字進(jìn)行檢索。第二步為比對(duì)第一步的兩項(xiàng)檢索結(jié)果,看是否存在重合。若存在則說(shuō)明數(shù)據(jù)塊缺失在修改時(shí)間有所變化,驗(yàn)證在Hive日志中檢索出的內(nèi)容,若無(wú)重合或未檢索到相關(guān)內(nèi)容,則說(shuō)明Hive日志或Hadoop系統(tǒng)服務(wù)輸出日志可能存在缺失、丟失等災(zāi)難情況。

      3 Hive數(shù)據(jù)存儲(chǔ)格式及特征

      通過(guò)實(shí)現(xiàn)3層邏輯關(guān)系的建立,取證人員最終可以實(shí)現(xiàn)用戶(hù)操作行為記錄在文件層面的還原,整個(gè)過(guò)程最終指向用戶(hù)操作行為對(duì)應(yīng)的HDFS文件在Linux的文件系統(tǒng)上存儲(chǔ)的數(shù)據(jù)塊block,但仍未具體到數(shù)據(jù)塊存儲(chǔ)的數(shù)據(jù),故仍需進(jìn)行數(shù)據(jù)塊存儲(chǔ)格式及特征的分析和識(shí)別。

      3.1 Hive的5種數(shù)據(jù)存儲(chǔ)格式

      Hive本身不提供數(shù)據(jù)存儲(chǔ)格式。其可以利用其他存儲(chǔ)數(shù)據(jù)的格式,存儲(chǔ)格式有5種:TextFile、SequenceFile、RCFile、ORCFile和Parquet。其中TextFile和SequenceFile為行式存儲(chǔ),Parquet為列式存儲(chǔ),RCFile及改進(jìn)版本的ORCFile為行列式存儲(chǔ)。行式存儲(chǔ)跟傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)一樣,將數(shù)據(jù)記錄分條存儲(chǔ)。列式存儲(chǔ)則是將數(shù)據(jù)按列分割后加入識(shí)別標(biāo)記進(jìn)行存儲(chǔ),可以實(shí)現(xiàn)跨越式查詢(xún)。行列式存儲(chǔ)則是綜合以上兩種方案,按行分割并按列存儲(chǔ)。針對(duì)以上多種數(shù)據(jù)存儲(chǔ)格式進(jìn)行恢復(fù)數(shù)據(jù)塊的識(shí)別,對(duì)于后期數(shù)據(jù)記錄的提取具有決定性的作用。Hive存儲(chǔ)格式的具體特點(diǎn)如表3所示。

      表3 Hive存儲(chǔ)格式及特點(diǎn)

      因?yàn)镠ive是文本批處理系統(tǒng),在向Hive中導(dǎo)入數(shù)據(jù)的格式多種多樣,比如數(shù)據(jù)源可能是二進(jìn)制格式或文本等,而Hive不需要特定的數(shù)據(jù)格式,而是利用hadoop本身InputFormat API來(lái)從各種數(shù)據(jù)源獲取數(shù)據(jù),并使用OutputFormat API將數(shù)據(jù)存儲(chǔ)為不同的數(shù)據(jù)格式。所以針對(duì)不同的數(shù)據(jù)源或存儲(chǔ)成不同的數(shù)據(jù)格式只需不同的InputFormat和Outputformat類(lèi)即可實(shí)現(xiàn)。在本文2 Hive存儲(chǔ)邏輯關(guān)系章中已提到通過(guò)元數(shù)據(jù)庫(kù)SDS可以查詢(xún)到數(shù)據(jù)庫(kù)數(shù)據(jù)輸入輸出的參數(shù),這里不再詳述。

      3.2 ORCFile

      ORCFile在Hive使用的5種數(shù)據(jù)存儲(chǔ)格式中是具有最高壓縮比和效率的,除特殊情況需要使用到Parquet以外,生產(chǎn)環(huán)境中ORCFile一直占據(jù)主導(dǎo)地位,因此本文特別針對(duì)ORCFile存儲(chǔ)格式、存儲(chǔ)方式及存儲(chǔ)特征進(jìn)行一定程度的分析,以便取證人員在進(jìn)行后期數(shù)據(jù)記錄提取時(shí)方便展開(kāi)工作。

      ORCFile是RCFile經(jīng)過(guò)一些優(yōu)化后的高效存儲(chǔ)格式,其提供一種高效的方法來(lái)存儲(chǔ)Hive數(shù)據(jù)。ORCFile克服Hive了其他數(shù)據(jù)存儲(chǔ)格式的種種缺陷,提高了Hive的讀寫(xiě)及處理數(shù)據(jù)的性能。ORCFile格式較RCFile減少了Namenode負(fù)載,同時(shí)還支持復(fù)雜數(shù)據(jù)類(lèi)型、存儲(chǔ)索引數(shù)據(jù),支持脫離掃描標(biāo)記進(jìn)行文件分割等優(yōu)點(diǎn)。

      ORCFile是以二進(jìn)制方式存儲(chǔ)的,故無(wú)法直接讀取,一個(gè)ORCFile包含多個(gè)stripe,每一個(gè)stripe包含多條記錄,這些記錄按列進(jìn)行獨(dú)立存儲(chǔ)。同時(shí)ORCFile為自解析,包含許多元數(shù)據(jù)。ORCFile的文件結(jié)構(gòu)如圖4所示。

      圖4 ORCFile文件結(jié)構(gòu)

      (1)文件級(jí)元數(shù)據(jù):包括文件的描述信息PostScript、文件meta信息(包括整個(gè)文件的統(tǒng)計(jì)信息)、所有stripe的信息和文件schema信息。

      (2)stripe:一組行形成一個(gè)stripe,每次讀取文件是以行組為單位的,一般為HDFS的塊大小,其保存了每一列的索引和數(shù)據(jù)。其具體組成如下:①I(mǎi)ndexData保存的是每一列的最大值和最小值,以及每一列所在的行。②row_index包括了該行的偏移量及改行的長(zhǎng)度,正是因?yàn)閞ow_index使得在讀取數(shù)據(jù)時(shí)可以跳到正確的壓縮塊位置。例如:Stream:column 0 section ROW_INDEX start:3 length 11,Stream:column 1 section ROW_INDEX start: 14 length 28。③RowData保存的實(shí)際數(shù)據(jù)。④StripeFooterstream的位置信息。

      (3)row group:索引的最小單位,一個(gè)stripe中包含多個(gè)row group,默認(rèn)為10000個(gè)值組成。

      (4)stream:一個(gè)stream表示文件中一段有效的數(shù)據(jù),包括索引和數(shù)據(jù)兩類(lèi)。索引stream保存每一個(gè)row group的位置和統(tǒng)計(jì)信息,數(shù)據(jù)stream包括多種類(lèi)型的數(shù)據(jù),具體需要哪幾種是由該列類(lèi)型和編碼方式?jīng)Q定。

      Hive中提供了更詳細(xì)的查看ORCFile元數(shù)據(jù)的工具 orcfiledump,orcfiledump將元數(shù)據(jù)以json格式返回,通過(guò)這些元數(shù)據(jù)可以幫助取證人員在后期數(shù)據(jù)記錄提取的過(guò)程中所需要的關(guān)鍵信息,只有獲取了這些關(guān)鍵信息,取證人員才可以進(jìn)一步挖掘恢復(fù)數(shù)據(jù)塊中的數(shù)據(jù),重構(gòu)數(shù)據(jù)結(jié)構(gòu)并填充數(shù)據(jù),以可視化形式將數(shù)據(jù)記錄輸出[6]。

      4 Hive用戶(hù)操作行為記錄還原方法

      基于日志文件的Hadoop數(shù)據(jù)倉(cāng)庫(kù)Hive用戶(hù)操作行為還原方法的最大特點(diǎn)在于將Hive分為3層架構(gòu),并通過(guò)建立用戶(hù)層、文件層和物理層之間的邏輯關(guān)系實(shí)現(xiàn)用戶(hù)操作行為的還原。在建立邏輯關(guān)系過(guò)程中實(shí)現(xiàn)了多條途徑一種效果的線索獲取方式,可以針對(duì)線索信息進(jìn)行印證以提高可信度。

      4.1 Metastore信息提取

      (1)使用提供的用戶(hù)名/密碼或遠(yuǎn)程訪問(wèn)Metastore服務(wù)器,并采取與國(guó)家授時(shí)中心等標(biāo)準(zhǔn)時(shí)間源的對(duì)時(shí)操作。

      (2)依據(jù)Metastore服務(wù)器中的Hive多個(gè)配置文件獲取Hive日志存放路徑、連接元數(shù)據(jù)庫(kù)的用戶(hù)名和密碼、HDFS路徑、驅(qū)動(dòng)、Remote方式等。若取證環(huán)境使用Remote,還應(yīng)提取Mysql服務(wù)器地址及端口信息。

      (3)訪問(wèn)在步驟(2)中獲取的Hive日志存放路徑,若事先掌握時(shí)間線索可以對(duì)多個(gè)Hive日志文件進(jìn)行篩選。若Hive日志數(shù)據(jù)量較大應(yīng)進(jìn)行數(shù)據(jù)清洗,只保留用戶(hù)操作的相關(guān)記錄,若事先掌握時(shí)間線索可以對(duì)日志內(nèi)容進(jìn)行篩選。若發(fā)現(xiàn)日志文件缺失或丟失,應(yīng)立即進(jìn)行HDFS數(shù)據(jù)恢復(fù)。

      (4)針對(duì)在步驟(3)篩選出的用戶(hù)操作相關(guān)記錄設(shè)定關(guān)鍵字檢索包含HDFS路徑的相關(guān)記錄并整理。

      (5)連接元數(shù)據(jù)庫(kù),通過(guò)將元數(shù)據(jù)表DBS、TBLS、SDS中的基于字段DB_ID、SD_ID進(jìn)行合并,構(gòu)建完整的數(shù)據(jù)表與HDFS的關(guān)系,將結(jié)果與步驟(4)得到的結(jié)果進(jìn)行比對(duì)和驗(yàn)證。若有具體表的需求,可在步驟(4)(5)獲取的信息中檢索。

      4.2 Namenode信息提取

      (1)使用提供的用戶(hù)名/密碼現(xiàn)場(chǎng)或遠(yuǎn)程訪問(wèn)管理者主機(jī),并采取與國(guó)家授時(shí)中心等標(biāo)準(zhǔn)時(shí)間源的對(duì)時(shí)操作。

      (2)依Namenode中的文件系統(tǒng)的配置文件內(nèi)容構(gòu)建平臺(tái)環(huán)境拓?fù)浣Y(jié)構(gòu),確定各節(jié)點(diǎn)IP地址。并且獲取HDFS元數(shù)據(jù)在集群中的實(shí)際存儲(chǔ)路徑。

      (3)將HDFS元數(shù)據(jù)導(dǎo)出為XML格式,并將整個(gè)Metastore信息獲取過(guò)程中獲取到的需要檢索的時(shí)間線索、HDFS路徑線索及HDFS文件名線索分別設(shè)為關(guān)鍵字在XMLl中檢索,獲取數(shù)據(jù)id、修改時(shí)間和數(shù)據(jù)表文件名。若不存在,則說(shuō)明文件已經(jīng)被刪除,應(yīng)立即進(jìn)行DataNode節(jié)點(diǎn)上的HDFS數(shù)據(jù)恢復(fù)[7]。

      (4)將步驟(3)中獲取到的block_id與mtime分別設(shè)為關(guān)鍵字在Hadoop系統(tǒng)服務(wù)輸出日志中進(jìn)行檢索,獲取指定block自存在以后的被操作過(guò)的所有記錄,并比對(duì)結(jié)果檢查是否有重合。若有重合則驗(yàn)證Hadoop系統(tǒng)服務(wù)輸出日志中的內(nèi)容。若檢索無(wú)果,說(shuō)明Hadoop系統(tǒng)服務(wù)輸出日志缺失、丟失或被清理,應(yīng)立即進(jìn)行HDFS數(shù)據(jù)恢復(fù)。

      4.3 Datanode信息獲取

      (1)依據(jù)從Namenode信息獲取中構(gòu)建的拓?fù)浣Y(jié)構(gòu)圖和HDFS路徑信息找到目標(biāo)Datanode的IP地址,使用提供的用戶(hù)名/密碼現(xiàn)場(chǎng)或遠(yuǎn)程訪問(wèn)Datanode,并采取與國(guó)家授時(shí)中心等標(biāo)準(zhǔn)時(shí)間源的對(duì)時(shí)操作。

      (2)將Datanode中對(duì)應(yīng)block_id的數(shù)據(jù)塊以只讀方式導(dǎo)入至取證環(huán)境中。若無(wú)此block,則應(yīng)進(jìn)行HDFS數(shù)據(jù)恢復(fù),并使用二進(jìn)制編輯器查看block的頭部,確定block使用的數(shù)據(jù)存儲(chǔ)格式以及壓縮方式。

      4.4 數(shù)據(jù)記錄查看

      (1)在線索信息較為精準(zhǔn),數(shù)據(jù)量較少的情況下,TextFile、SequenceFile可以直接通過(guò)Hadoop系統(tǒng)命令進(jìn)行明文輸出。其他3種數(shù)據(jù)存儲(chǔ)格式則可以使用元數(shù)據(jù)重構(gòu)數(shù)據(jù)結(jié)構(gòu)后進(jìn)行查看。若存在壓縮,則應(yīng)針對(duì)相應(yīng)的數(shù)據(jù)格式壓縮方式進(jìn)行對(duì)應(yīng)的解壓。

      (2)在線索信息較模糊,數(shù)據(jù)量較多的情況下,可以通過(guò)將數(shù)據(jù)重新導(dǎo)入至集群取證環(huán)境中,通過(guò)集群的高運(yùn)算能力進(jìn)行對(duì)應(yīng)數(shù)據(jù)記錄查看操作。

      5 實(shí)驗(yàn)驗(yàn)證

      5.1 實(shí)驗(yàn)環(huán)境

      為驗(yàn)證Hive用戶(hù)操作行為還原方法,通過(guò)VMwareWorkstation搭建了以Hadoop框架為基礎(chǔ)的偽分布虛擬機(jī)作為實(shí)驗(yàn)環(huán)境。主機(jī)配置為:Intel(R) Core(TM) i7-7660U CPU @ 2.50GHz 2.50Ghz;237GB硬盤(pán)驅(qū)動(dòng);操作系統(tǒng),Windows10專(zhuān)業(yè)版 64-bit。虛擬機(jī)配置為:Intel(R) Core(TM) i7-7660U CPU @ 2.50GHz 2.50Ghz;20GB硬盤(pán)驅(qū)動(dòng);操作系統(tǒng),Ubuntu17.04 64-bit;內(nèi)存:2GB。Hadoop配置:Hadoop-2.8.1;塊大?。?28MB。

      5.2 實(shí)驗(yàn)過(guò)程

      整個(gè)實(shí)驗(yàn)過(guò)程參考本文4 Hive用戶(hù)操作行為記錄還原方法章節(jié)進(jìn)行,因?qū)嶒?yàn)環(huán)境搭建為偽分布式結(jié)構(gòu),因此方法中的構(gòu)建拓?fù)浣Y(jié)構(gòu)及使用Remote連接Metestore并未在實(shí)驗(yàn)過(guò)程中體現(xiàn)。整個(gè)用戶(hù)操作行為還原方法可參考圖5。

      (1) 數(shù)據(jù)準(zhǔn)備。首先在Linux本地存放一個(gè)text數(shù)據(jù)文件“info.txt“,其次進(jìn)入shell通過(guò)命令創(chuàng)建數(shù)據(jù)庫(kù)“myhive”,創(chuàng)建存儲(chǔ)格式為T(mén)extFile的數(shù)據(jù)表“info”,并將info.txt的內(nèi)容導(dǎo)入數(shù)據(jù)庫(kù)中,最后將id為29的數(shù)據(jù)記錄刪除。

      (2)MetaStore信息提取。首先訪問(wèn)Hadoop配置文件目錄并查看配置文件“hive-log4j2.properties”的內(nèi)容,在其中找到Hive日志存放路徑進(jìn)行訪問(wèn),將日志目錄下的所有日志導(dǎo)出至取證環(huán)境中并依次用編輯器打開(kāi)。通過(guò)檢索“createtableinfo”找到創(chuàng)建表info時(shí)的日志記錄內(nèi)容,可以獲取到數(shù)據(jù)表的創(chuàng)建時(shí)間,數(shù)據(jù)格式及結(jié)構(gòu)描述。在此條記錄位置向下檢索HDFS路徑信息找到info表存儲(chǔ)路徑為“hdfs://localhost:9000/user/hive/warehouse/myhive.db/info”。與此同時(shí)還在日志中檢索到涉及修改表info的日志記錄,通過(guò)此條記錄說(shuō)明用戶(hù)在太平洋時(shí)間2019-02-21 19:05:51運(yùn)行命令將info表中id為29的記錄刪除。其次查看配置文件hivesite.xml并找到標(biāo)簽<name>對(duì)應(yīng)內(nèi)容為“javax.jdo.option.ConnectionPassword”和“javax.jdo.option.ConnectionUserName”的<property>標(biāo)簽,并分別獲取兩個(gè)標(biāo)簽下對(duì)應(yīng)標(biāo)簽<value>的值,即登陸負(fù)責(zé)管理元數(shù)據(jù)的Mysql數(shù)據(jù)庫(kù)的登陸用戶(hù)名與密碼。并在<name>標(biāo)簽內(nèi)容為“javax.jdo.option.ConnectionURL”的標(biāo)簽<property>下提取到標(biāo)簽<value>值,即登陸元數(shù)據(jù)庫(kù)的地址。因此使用用戶(hù)名和密碼連接Mysql數(shù)據(jù)庫(kù)地址,并使用查詢(xún)命令將元數(shù)據(jù)表DBS、TBLS、SDS中的基于字段DB_ID、SD_ID進(jìn)行信息合并,最終獲得數(shù)據(jù)表info對(duì)應(yīng)的HDFS路徑信息與在Hive日志中獲取的內(nèi)容相同,說(shuō)明內(nèi)容準(zhǔn)確無(wú)誤。

      (3)Namenode信息提取。因?qū)嶒?yàn)環(huán)境為偽分布式,Hadoop的Namenode、Datanode及Hive的Metastore都在一臺(tái)虛擬機(jī)中,故省略通過(guò)用戶(hù)名/密碼訪問(wèn)及拓?fù)浣Y(jié)構(gòu)構(gòu)建等步驟。

      首先訪問(wèn)Namenode存放配置文件的目錄并打開(kāi)hdfs-site.xml,獲取內(nèi)容如圖6所示。

      可知HDFS元數(shù)據(jù)存放目錄為“/usr/local/Hadoop/hdfs/name”,訪問(wèn)此目錄并將fsimage文件通過(guò)HDFS命令轉(zhuǎn)換為XML文件并使用編輯器打開(kāi),因在Metastore中獲取的HDFS路徑中包含文件名,故在fsimage.xml中檢索“<name>info</name>”,找到HDFS目錄info對(duì)應(yīng)的相關(guān)記錄如圖7所示。

      圖7 fsimage中關(guān)于數(shù)據(jù)表info的內(nèi)容

      說(shuō)明info文件確實(shí)存在于HDFS文件系統(tǒng)中,且修改時(shí)間轉(zhuǎn)換為太平洋時(shí)間為2019-02-21 19:05:55,在Hive日志檢索時(shí)曾檢測(cè)到刪除id為29記錄的命令運(yùn)行時(shí)間為2019-02-21 19:05:51,而文件的修改時(shí)間為2019-02-21 19:05:55,經(jīng)查詢(xún)hive日志發(fā)現(xiàn)系統(tǒng)在2019-02-21 19:05:51運(yùn)行刪除記錄命令并在2019-02-21 19:05:55完成命令執(zhí)行過(guò)程,且info表在之后并無(wú)數(shù)據(jù)增刪改的過(guò)程。

      (4)Datanode信息提取及數(shù)據(jù)記錄查詢(xún)。要提取Datanode中的數(shù)據(jù)塊就必須獲取具體表所存儲(chǔ)block的id號(hào)并進(jìn)行檢索。在進(jìn)行Namenode信息提取時(shí)已在fsimage中獲取到目錄info的相關(guān)記錄,而在此條記錄位置向下順延即可找到在HDFS目錄info下面所存儲(chǔ)的數(shù)據(jù)表數(shù)據(jù)文件的相關(guān)記錄。據(jù)此在fsimage中info目錄的相關(guān)記錄下找到數(shù)據(jù)塊記錄,在記錄標(biāo)簽<id>中獲得info表的數(shù)據(jù)文件000000_0的block_id為“1073741868”,加上數(shù)據(jù)塊編號(hào)前綴即可組成在物理層對(duì)應(yīng)的數(shù)據(jù)塊名稱(chēng)為“blk_1073741868”。因?yàn)槊總€(gè)數(shù)據(jù)表的數(shù)據(jù)文件默認(rèn)命名規(guī)則是一樣的,因此存在多表同塊名的情況,若一表多塊或需獲取多表數(shù)據(jù)塊都需通過(guò)fsiamge中的inode結(jié)構(gòu),而通過(guò)WEBUI則簡(jiǎn)化了這一過(guò)程。

      通過(guò)瀏覽器訪問(wèn)Namenode的IP地址與端口號(hào)50070組成的URL,在文件瀏覽頁(yè)面菜單可以直接獲取HDFS文件對(duì)應(yīng)的數(shù)據(jù)塊信息,其原理即通過(guò)解析HDFS元數(shù)據(jù)文件中的inode等信息直接將塊信息可視化顯示出來(lái)。圖8即數(shù)據(jù)表info對(duì)應(yīng)的數(shù)據(jù)塊信息。

      圖8 WEBUI查詢(xún)數(shù)據(jù)塊id

      通過(guò)Hadoop配置文件獲取到Namenode節(jié)點(diǎn)的Hadoop系統(tǒng)服務(wù)輸出日志的目錄并用編輯器打開(kāi)。直接搜索塊名“blk_1073741868”發(fā)現(xiàn)有且僅有一條時(shí)間為“2019-02-21 19:05:53”表示塊分配(allocate)的記錄,在Namenode信息獲取過(guò)程中曾得知在時(shí)間“2019-02-21 19:05:51”至“19:05:55”期間為執(zhí)行刪除id為29的數(shù)據(jù)記錄的命令,而因?yàn)镠ive一次寫(xiě)入多次讀取的特性,刪除數(shù)據(jù)記錄的方式為將數(shù)據(jù)記錄全部提取并重新寫(xiě)入,因此必然會(huì)導(dǎo)致數(shù)據(jù)塊的變化,而新數(shù)據(jù)塊“blk_1073741868”則分配給不包含id為29的數(shù)據(jù)記錄。因此Hadoop系統(tǒng)服務(wù)輸出日志中的內(nèi)容也正印證了從Metastore與Datanode中獲取信息的正確性。通過(guò)結(jié)合配置文件最終找到數(shù)據(jù)塊存放目錄,并將數(shù)據(jù)塊提取至實(shí)驗(yàn)環(huán)境中。因?yàn)閷?shí)驗(yàn)中使用的數(shù)據(jù)存儲(chǔ)格式為T(mén)extFile,因此可以直接將數(shù)據(jù)塊使用任何文本編輯器打開(kāi)即可查看其中的所有數(shù)據(jù)記錄。

      6 結(jié)語(yǔ)

      在大數(shù)據(jù)時(shí)代Hadoop框架的適用范圍不斷擴(kuò)大,Hive作為Hadoop框架的數(shù)據(jù)倉(cāng)庫(kù)存儲(chǔ)數(shù)據(jù)價(jià)值極大,為適應(yīng)國(guó)內(nèi)外對(duì)于在Hive取證尤其是用戶(hù)操作行為還原方面的需求,本文以Hive為研究核心,將Hive分為用戶(hù)層、文件層與物理層,通過(guò)分析各種日志及HDFS元數(shù)據(jù)提出了針對(duì)Hive用戶(hù)操作行為的還原方法,同時(shí)在方法設(shè)計(jì)中考慮到證據(jù)鏈的完整性,通過(guò)多種方法互相印證的方式提高證明效力,并通過(guò)實(shí)驗(yàn)證明方法的可行性。本文將繼續(xù)完善用戶(hù)操作行為還原方法,針對(duì)多種數(shù)據(jù)存儲(chǔ)格式的數(shù)據(jù)記錄提取展開(kāi)研究,使用戶(hù)操作行為還原方法更好的貼近實(shí)戰(zhàn)。

      猜你喜歡
      數(shù)據(jù)表日志檢索
      一名老黨員的工作日志
      扶貧日志
      心聲歌刊(2020年4期)2020-09-07 06:37:14
      湖北省新冠肺炎疫情數(shù)據(jù)表
      黨員生活(2020年2期)2020-04-17 09:56:30
      2019年第4-6期便捷檢索目錄
      基于列控工程數(shù)據(jù)表建立線路拓?fù)潢P(guān)系的研究
      游學(xué)日志
      專(zhuān)利檢索中“語(yǔ)義”的表現(xiàn)
      圖表
      基于VSL的動(dòng)態(tài)數(shù)據(jù)表應(yīng)用研究
      河南科技(2014年24期)2014-02-27 14:19:25
      一種基于粗集和SVM的Web日志挖掘模型
      周宁县| 茂名市| 桃源县| 西平县| 庆云县| 磴口县| 山阴县| 青铜峡市| 曲靖市| 滨州市| 启东市| 阜新| 融水| 尉氏县| 盈江县| 南阳市| 清水河县| 宜州市| 苏尼特左旗| 页游| 虹口区| 鄄城县| 陆川县| 左云县| 资中县| 珲春市| 防城港市| 航空| 长乐市| 应城市| 改则县| 高雄市| 曲阜市| 福贡县| 视频| 杭锦后旗| 高陵县| 双辽市| 丹阳市| 苍南县| 盐源县|