1. 程式人生 > >【Hadoop】基於Hadoop/Hbase/Hive的小型離線伺服器日誌分析應用

【Hadoop】基於Hadoop/Hbase/Hive的小型離線伺服器日誌分析應用

1、專案簡介

本專案主要設計一個基於Hadoop的日誌分析系統。其中的日誌資料主要來自於某系統開發測試期間的伺服器訪問日誌資料(Tomcat),通過對這些日誌資料利用正則表示式等技術手段進行處理,提取出匹配到的目標資料資訊,將其進行歸類化處理,而對日誌分析處理方式中,本文探究了直接利用Hadoop的日誌分析功能和利用Hadoop+Hbase+Hive結合的技術實現對日誌進行分析的功能,作為對雲端計算技術的相關學習與入門,著重對相關技術的實現,程式碼結構的構成等進行研究,分析兩種方式是如何實現日誌分析功能的,並通過具體的程式設計實現相關的日誌分析功能。

本專案純屬自娛自樂型,僅供入門Hadoop的同學參考,大神請忽略

程式碼、資料和詳細的系統文件說明,已經上傳百度雲盤,全套開發工具(Hadoop-2.7.2/Hbase-1.1.2/Hive-1.2.1/Zookeeper-3.4.6/Mysql/VMware/Ubuntu14.0)。
專案的網盤地址:
連結:https://pan.baidu.com/s/1dGbylSd,另外一部分是技術文件和程式碼(需要找本人索要)
聯絡方式:
郵箱:[email protected](郵件內容請告知作何用?歡迎技術交流,不限於Hadoop/Oracle/Java/其他)

2、環境

hadoop-2.7.2+ hbase-1.1.2+ zookeeper-3.4.6+hive-1.2.1+Mysql(作為元資料庫)
三臺虛擬機器:
系統:Ubuntu14.0系統,JDK1.7
Hadoop: 1個Master(3G記憶體,作為NameNode) 2個Slave(1.5G記憶體,作為DataNode)
注(各個部分在整個環境中的角色功能):
Hadoop:底層的HDFS環境,資料的儲存歸根結底還是儲存在HDFS上的
Hbase:資料庫
Zookeeper:用來進行叢集管理
Hive:將Map/Reduce的一系列操作封裝成了HQL(類似於SQL),方便統計查詢資料
Mysql:Hive需要資料庫作為元資料,Mysql充當元資料庫的作用

3、資料說明

參考專案文件《基於Hadoop的日誌分析系統》(在網盤資料裡有)

4、處理流程

兩種實現方式:
1 純基於Hadoop進行統計分析
(1)日誌檔案資料上傳至HDFS
(2)利用Map/Reduce,根據正則表示式進行統計(類似於詞頻統計)
(3)利用Partitioner類,根據正則匹配,將IP訪問量統計結果,每天訪問量統計結果,時間段統計結果,訪問方法比例統計結果輸出到不同的檔案(這時候結果還沒有排序)
(4)對HDFS輸出結果進行排序
(5)利用Echart進行結果展示

2 基於Hadoop+Hbase+Hive進行統計分析
(1)將本地的日誌資料檔案利用正則表示式進行提取,並抽入到Hbase
(2)利用Hive進行統計,統計結果和第一種方法一樣
(3)利用Echart進行結果展示

5、結果分析

實驗結果分為四個部分:

1,IP訪問次數統計圖

這裡寫圖片描述

從圖中可以看出每個IP訪問的次數和各IP所佔比例,其中開發人員訪問次數佔比很高。

2,訪問時段統計

這裡寫圖片描述

從圖中可以看出一天中每個時段訪問Tomcat的次數。其中,3點到8點的訪問次數很少,表明這個時間段人們沒有在工作;而10點到凌晨2點訪問次數一直都很多,表明這個時間段人們在工作,並且工作到很晚。

3,訪問請求方式統計

這裡寫圖片描述

從圖中可以看出,兩種訪問請求方式的所佔的比例。其中,使用get()方法訪問Tomcat的次數遠遠高於使用post()方法訪問的次數。

4,統計歷史每天的訪問量

這裡寫圖片描述

從圖中可以看出每天訪問Tomcat的次數。其中,11月和12月訪問Tomcat的次數比9月10月高,12月9日這天訪問Tomcat的次數最高。

6、參考資料以及需要注意的問題

5.3, hadoop叢集配置之hive1.2.0安裝部署(本次實踐採用遠端mysql,即mysql搭建在本地,而不是在虛擬機器)
http://www.mincoder.com/article/5809.shtml
http://blog.csdn.net/yingxiake/article/details/51656970
http://blog.csdn.net/thdline/article/details/51714431
http://blog.csdn.net/zhihaoma/article/details/48578589
http://www.cnblogs.com/edisonchou/p/4426096.html
需要注意的幾點:
(1)找到一個叫jline-2.1.2.jar的檔案,複製他,去hadoop主目錄將hadoop下的三個同名但不同版本的jline替換成剛剛複製的。(原版本刪除)
(2)執行元資料服務:
在主目錄輸入(在hive目錄下而不是其bin目錄下進入 )
bin/hive –service metastore
(3)執行hive server
bin/hive –service hiveserver(可能是根據版本不同,如果時比較新的hive,需要在後面的命令列後面加2)見下面的
(4)以上的hiveserver在hive1.2.1中並不會出現,官網的說法是:
HiveServer is scheduled to be removed from Hive releases starting Hive 0.15. See HIVE-6977. Please switch over to HiveServer2.

5.4,hadoop,zookeeper,Hbase啟動關閉順序
(1)執行hadoop(主機上執行就可以了)
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
(2)zookeeper執行(每個機子上面都要執行)
/usr/zookeeper-3.4.6/bin/zkServer.sh start
(3)執行Hbase(主機上執行就可以)
/usr/hbase-1.1.2/bin/start-hbase.sh
(4) 執行Hive(配置了的機子上執行)
hive –service metastore
hive –service hiveserver2
(5) 關閉Hive
直接關閉視窗,在jps命令之後可以看到runJar程序消失
(6)關閉Hbase
/usr/hbase-1.1.2/bin/stop-hbase.sh
(7)關閉zookeeper
/usr/zookeeper-3.4.6/bin/zkServer.sh stop
(8)關閉hadoop
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver