Centos8.3、hadoop-2.6.4 簡單的日誌分析實驗
引言 前段時間答應朋友做一個hadoop分析日誌的教程,說完就後悔了,我已經很久沒碰它了,為了實現這個承諾不得以又把以前買的書找出來研究一下。值得慶幸的是以前的筆記還在不需要我從頭再來。不過搭建hadoop的環境很複雜,我也不準備做從零開始的教程,我準備把我搭建好的環境直接搬過來了,這樣不用糾結環境搭建的複雜,也不需要了解Map/Reducer程式設計就可以直接體驗一下hadoop的魅力。
環境準備
序號 | 環境和資料 | 版本 | 下載地址 |
1 | CentOS-8.3.2011-x86_64-minimal.iso | 8.3 |
連結: https://pan.baidu.com/s/1kWRffCoup2Oxat953ZAe5w 提取碼: ml2e |
2 | hadoop-2.6.4.tar.gz | 2.6.4 |
連結: https://pan.baidu.com/s/1A_fqViL62xrZ6rnA1M8nYQ 提取碼: nfna |
3 | jdk-7u80-linux-x64.rpm | 1.7 |
連結: https://pan.baidu.com/s/1sGneDO4jcfk5ZlbOLVZVpA 提取碼: 5nmj |
4 | access.txt |
連結: https://pan.baidu.com/s/1aKlVcXrrWo5kEmoWa7DD8Q 提取碼: 5bgu |
注意:請一定使用以上的地址下載的,不然可能出現很多未知的問題。hadoop-2.6.4.tar.gz 配置檔案是我改過的,access.txt 是用來測試的tomcat日誌資料。
第一步 使用虛擬機器軟體安裝作業系統(沒有裝過的同學可以去補下課,這裡就不講了)
第二步 作業系統安裝好後,先關閉防火牆順便安裝一下vim,具體操作如下:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動
yum -y install vim #安裝vim
第三步 使用上面的下載地址下載jdk1.7上傳到剛才建立的centos8.3虛擬機器使用命令安裝(這裡一定要使用rpm安裝因為這個安裝目錄是固定的)安裝目錄為/usr/java/jdk1.7.0_80 這個jdk的目錄已經被我寫在hadoop配置中。安裝命令如下
rpm -ivh jdk-7u80-linux-x64.rpm #rpm 安裝jdk
java -version #檢視安裝是否成功
第四步 使用上面地址下載hadoop-2.6.4.tar.gz(注意這個包基本配置都是配置好的,不需要做調整的) 包 然後解壓到 /usr/local 目錄下 解壓命令如下
tar -zxf hadoop-2.6.4.tar.gz -C /usr/local
第五步 編輯/etc/profile 檔案新增內容如下
vim /etc/profile # 開啟檔案編輯 # 在檔案尾部追加以下內容 export JAVA_HOME=/usr/java/jdk1.7.0_80 export JRE_HOME=$JAVA_HOME/jre export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/jre export HADOOP_HOME=/usr/local/hadoop-2.6.4/bin export PATH=$PATH:$HADOOP_HOME
source /etc/profile#儲存檔案後執行
完成後 執行 hadoop 或者hdfs 命令看看是否成功 正確結果如
第六步 關閉虛擬機器然後克隆一臺例項(這裡做實驗克隆一臺就夠了)
克隆完成修改例項名稱 第一臺例項hostname 更改為master 第二臺例項更改為slave1 如下圖:
vim /etc/hostname #編輯例項名稱
reboot #重啟boot
第七步 配置ssh 無金鑰訪問
1.在master例項執行
ssh-keygen -t rsa
注意這裡所有輸入直接回車
2.在slave1例項執行(同上所有輸入直接回車)
ssh-keygen -t rsa
注意 slave1例項上我們cd 到/root/.ssh/ 目錄 使用ls命令檢視 有兩個檔案分別是id_rsa 和 id_rsa.pub 我們拷貝id_rsa.pub 檔案並且重新命名為slave1 然後複製slave1檔案到master例項上 命令如下
cd /root/.ssh/ #跳轉到/root/.ssh目錄 cp id_rsa.pub ./slave1 #複製 id_rsa.pub檔案並且重名命為slave1 scp ./slave1 root@172.16.102.15:/root/.ssh/ #將slave1檔案複製到master例項/root/.ssh/目錄下 注意 (1).要輸入yes 和 master例項的密碼。(2)172.16.102.15 這個是master例項的ip根據自己master實際ip修改
如下圖:(圖片這裡master ip地址寫錯了 應該是172.16.102.15 而不是16)
然後我們來到master例項同樣到/root/.ssh 目錄下合併master例項的id_rsa.pub 檔案和slave1例項複製過來的檔案並且命名為authorized_keys 命令如下:
cd /root/.ssh/ cat id_rsa.pub slave1 >>authorized_keys #合併master和slave1的金鑰檔案 scp ./authorized_keys root@172.16.102.16:/root/.ssh #複製合併後的檔案到slave1例項 注意 172.16.102.16 是slave1的ip要根據自己實際的ip修改命令
操作如下圖:
測試效果
第八步 編輯/etc/hosts檔案 如下圖
注意這兩個ip要改成自己實際的ip然後同步host檔案到其他例項 這裡我是在master例項上編輯的所以需要同步到slave1例項。執行如下命令:
scp /etc/hosts slave1:/etc/hosts
第九步 編輯 master例項子中 hadoop的slave檔案 檔案位於/usr/local/hadoop-2.6.4/etc/hadoop 編輯內容很簡單之前在slave中我配置了三臺slave例項現在只有一臺 刪除另外兩個配置就好 結果如下
第十步 格式化節點 在master、slave例項分別執行
hdfs namenode -format
執行結果如下:
第十一步 嘗試啟動hadoop 我們來到master例項 /usr/local/hadoop-2.6.4 目錄下執行./start_hadoop.sh 指令碼 正確結果如下
在master例項執行jps命令測試正確結果如下
在slave1例項上測試正確結果如下
第十二步訪問管理介面
修改自己本機器的hosts檔案 新增
172.16.102.15 master 172.16.102.16 slave1
http://master:50070/dfshealth.html#tab-overview
http://master:8088/cluster
http://master:19888/jobhistory
http://master:50070/nn_browsedfscontent.jsp 本次實驗主要使用的是這個地址
訪問後介面如下
到這環境終於準備好了,即使我是複製之前搭建的環境,還是有點複雜。現在我們開始準備日誌分析。
第一步上傳日誌檔案到master例項然後在上傳到hdfs 上傳檔案到hdfs需要先hdfs資料夾 建立和上傳命令如下
hdfs dfs -mkdir /aiatt #建立aiatt資料夾
hdfs dfs -put ./access.txt /aiatt #上傳access 日誌檔案到hdfs檔案系統 aiatt目錄下
操作結果如下:
然後我們重新整理http://master:50070/nn_browsedfscontent.jsp 頁面檢視結果
現在我們開始執行Map/Reduce 任務任務如下:
這段日誌是某個tomcat的請求記錄日誌,現在我們想要的結果是計算出每個請求請求的頻率 然後針對有請求頻率過高的介面做優化或者快取。針對這個任務的MapReduce我也已經寫好了 直接下載
連結: https://pan.baidu.com/s/1Wu6uDSBBZK9Wsaue1kmWXQ 提取碼: obw5
然後上傳到master例項執行一下命令
hadoop jar ./aiatt.jar /aiatt/access.txt /aiatt/output/result
/aiatt/access.txt 是輸入的檔案地址 /aiatt/output/result 輸出結果地址
這個兩個地址都是hdfs 的地址 另外要注意重複執行任務輸出地址不能一致,不然會報錯。執行結果如下圖:
最後我們重新整理 剛才的hdfs檔案檢視的地址檢視計算結果
到這裡就結束了 這個實驗主要是想讓未接觸過hadoop的體驗一下,如果真的想學習的話推薦 《Hadoop大資料開發基礎》這本書 ,我就是看這本書自學的,雖然這本書有幾個小錯誤但是還是不錯的入門書