視頻1的全了,視頻3的還不全 日志數據分析: 1.背景 1.1 黑馬論壇日志,數據分為兩部分組成,原來是一個大文件(05_30之前),是56GB;以后每天生成一個文件,大約是150-200MB之間; 1.2 日志格式是apache common日志格式; 1.3 分析一些核心指標,供運營決策者使用; 1.4 開發該系統的目的是分了獲取一些業務相關的指標,這些指標在第三方工具中無法獲得的; 2.開發步驟 2.1 把日志數據上傳到HDFS中進行處理 如果是日志服務器數據較小、壓力較小,可以直接使用shell命令把數據上傳到HDFS中; 如果是日志服務器數據較大、壓力較大,使用NFS在另一台服務器上上傳數據; 如果日志服務器非常多、數據量大,使用flume進行數據處理; 技術:flume: source: 是從spool directory中拿的 sink: hdfs和Hbase(我們同樣要把數據送到Hbase中) channel:文件 2.2 使用MapReduce對HDFS中的原始數據進行清洗(清洗的意思是,數據中不要的就扔掉,需要補充的就補充進來) 技術:Map/Reduce 2.3 使用Hbase存儲明細日志,能夠利用IP,時間查詢(使用Hbase,這部分沒講) 技術:設計表、預分區 (因為我們的數據在Hbase存儲的時候,他都是存儲在RegionServer中的Region上, 我們發揮Hbase的優勢是分布式查詢的優勢,我們應該盡量多的分一些Region, 讓我們的數據盡量均勻的分攤到我們的Region中,這樣查詢的時候才可以發揮出並行的優勢) 具體表結構設計,看ppt 2.4 使用Hive對清洗后的數據進行統計分析,得到PV,獨立IP數,跳出數,注冊用戶數等;(使用hive或者pig) 技術:hive(主要用到Hive的建表操作,比如內部表,分區表,外部表,以及動態修改分區,以及視圖,自定義函數操作) 2.5 使用Sqoop把Hive產生的統計結果導出到mysql中; 技術: sqoop 由於數據導入到mysql中,所以我們還需要對mysql表進行設計(這里的表指的是匯總表),具體表結構看PPT 2.6 如果用戶需要查看詳細數據的話,可以使用HBase進行展現; 注意: 我們這里使用Hive進行統計分析,然后把結果導出到mysql中,被導出到mysql中的數據都是匯總值。 如果我們發現某個IP,他訪問的很頻繁,我們可能感覺到他有一些異常,我們想看一下這個IP在某一段時間內 干了什么事,訪問了什么。看某個IP在指定時間內的活動情況,就需要看詳細信息,這些詳細信息在我們mysql是拿不到的 因為導出到mysql中的是匯總信息,沒有詳細信息,如果Mysql要是能存詳細信息要hadoop就沒什么用了。這些詳細信息是Hbase 來做。就說這些明細信息,我們可以用Habase來存儲。進行存儲的時候關鍵的是要判斷一下你用什么進行查詢,也就是說 設置Hbase,關鍵是設置行健,我們剛才說是用IP和時間來查詢,那么我們需要把IP和時間放到行健中。 另外,我們還會用到linux的crontab來做調度,crontab就是一個linux中的定時器,我們的機制是,服務器日志每天都會生成,所以 需要我們的程序每天定時的運行處理,所以需要用crontab做定時器。所以還需要會寫linux腳本 3.詳細代碼 3.1 使用shell命令把數據從linux磁盤上傳到HDFS中 3.1.1 在hdfs中創建目錄,命令如下 $HADOOP_HOME/bin/hadoop fs -mkdir /hmbbs_logs 3.1.2 寫一個shell腳本,叫做upload_to_hdfs.sh,內容大體如下 yesterday=`date --date='1 days ago' +%Y_%m_%d` hadoop fs -put /apache_logs/access_${yesterday}.log /hmbbs_logs 3.1.3 把腳本upload_to_hdfs.sh配置到crontab中,執行命令crontab -e, 寫法如下 * 1 * * * upload_to_hdfs.sh
