資料科學家分散檔案系統 (Hadoop)
要處理 Big Data,就必須要有相對應的設備,才有辦法〝驅動〞如此龐大的資料量,而所謂的驅動,不單單只是存放與管理 Big Data,還要有辦法對其進行資料分析,才有辦法從海量的資料中,整理出有用的資料。
而現階段處理 Big Data 的關鍵技術,就是使用 Hadoop,那什麼是 Hadoop 呢?其實,Hadoop 是基於 Google 搜尋引擎所設計出來的分散式運算技術,簡單來說,就是利用大量的伺服器,並配合平行運算的架構,來產生可觀的運算量與儲存,而且可以不需要使用高檔的伺服器設備,善用一般的價位的伺服器,就可以創造最有符合經濟效益的分析,這對於公司企業來說,不但可以省下許多硬體資源經費的支出,更可以利用相同的經費,建構出更多 Cluster 架構的伺服器群來承接 Big Data 的運算量。
Linux KVM 魔法書 - 虛擬框架系統
然而,除非是公司既定要建置 Hadoop 的政策,或者是已經存在架構好的 Hadoop ,不然若是因為要嘗試,或測試 Hadoop 的功能,而花費時間與精力在安裝、設定與架構 Hadoop 上面,實在是有些不太合乎經濟效益,雖然說建置 Hadoop 的難度並不算高,但是要搞定所有的安裝與設定,還是要花費不少的時間。
難道,沒有比較快速的方式嗎?當然有,利用「Linux KVM 魔法書」的『虛擬框架系統』,就可以快速啟動架構好的 Hadoop ,並且可以馬上直接進行各種 Big Data 的資料處理、搜尋與運算,而此虛擬框架系統本身是一個可攜式的框架系統,並利用 Linux KVM 來驅動伺服器群,所以很適合用來進行系統、程式,或資料分析的測試。
下載與簡介「資料科學家分散檔案系統 - Hadoop Distributed File System」壓縮包
虛擬框架系統有需多不同的實作平台,這邊就實際來介紹「資料科學家分散檔案系統 (HDFS)」這一套資訊實作平台,在終端機(Host OS)內利用以下指令來下載實作平台的檔案縮
$ wget http://tbala.net/download/kvmhdfs1.0.zip
下載的檔案是一個壓縮檔,將檔案放置在個人家目錄內之後,直接解壓縮在家目錄之內,筆者實作的系統平台是 Ubuntu Desktop LTS 12.04.1 ,而虛擬框架系統的設計與測試也都是在此系統平台內完成,其他版本的系統則不建議使用,以免產生許多後續不必要的捆擾。
檔案下載完成,並將檔案放置家目錄之後,直接利用以下指令來將檔案解壓縮:
$ unzip kvmhdfs1.0.zip
解壓縮之後,進入 kvmhdfs1.0 的資料夾,並利用〝ls -la〞的指令來檢視資料夾內的內容:
資料夾內的檔案很多,就暫時先不一一詳述,這邊只需要先注意〝hdfs.sh〞這一個 bash script 檔案,而此 script 整合了資料夾內〝kvmaddsw.sh〞、〝kvmrouter.sh〞與〝kvmclient.sh〞這三個 script ,再搭配「conf」資料夾內「hadoop104.xml」的 xml 檔案,快速完成了以下二件事:
利用〝hdfs.sh〞,就可以快速架構出一個具有完整架構的 Hadoop 分散式檔案系統 (HDFS),並且馬上就可以直接使用,神奇吧!接下來,就讓我們實際操作一次吧!
啟動「Hadoop 分散式檔案系統 - Hadoop Distributed File System」
在「kvmhdfs1.0」資料夾內,利用以下指令來啟用 Hadoop:
$ sudo ./hdfs.sh
而系統若提示要輸入密碼,請輸入使用者登入密碼,若看到以下訊息,則表示系統(Host OS)缺乏執行(啟用)HDFS(虛擬電腦)所需的相關套件,只需要依照提示,安裝套件即可:
套件安裝完成,請執行 exit 命令, 然後再執行一次〝sudo ./hdfs.sh〞命令,在終端機會看到以下的訊息:
由此終端機訊息可以知道我們產生了一個「SH100」的 Switch Hub,並且也產生了 7 張虛擬網路介面,以提供虛擬電腦來使用。
除此之外,還一併啟動了 4 台虛擬電腦,而 HDFS 系統,就是由這 4 台虛擬電腦所架構而成的,且這 4 台虛擬電腦,在 HDFS 的架構內,也扮演不同的角色,分別為 NN(Name Node)、SN(Secondary Name Node)、DN01(Data Node),與 DN02( Data Node),而名稱後方括弧內的數字,如 512 M,則示次此虛擬電腦所設定的記憶體大小。
另外,還會跳出(開啟)另外的終端機視窗,並且顯示啟動中的 4 台虛擬電腦:
開機完成之後,除了 NN 這台虛擬電腦之外,其餘的虛擬電腦開機完成之後,就會看到如下的圖示:
在終端機內,就可以清楚看到虛擬電腦的 TCP/IP 資訊,至於 NN(Name Node)這台虛擬電腦,開機完成之後,就會直接啟動 HDFS 的所有服務:
確認所有虛擬電腦都開機完成之後(包含 NN 啟動 HDFS 的程序),直接在 NN 的終端機內輸入以下指令,並按下 Enter 鍵後執行:
# ./checkHDFS.sh
由圖中可以看到,此指令是用來檢查 HDFS 系統內,各個伺服器的角色與狀況。
接著再利用以下指令,來檢視 HDFS 分散式系統的資訊:
# hadoop dfsadmin -report
由輸出的資訊就可以知道 HDFS 系統的相關資訊,且因為實作平台預設已經預先將 HDFS 檔案系統進行了格式化,所以就可以開始使用 Hadoop 了。
而若已經使用過,或者要清空 HDFS 檔案系統內的資料的話,則可以利用以下指令來重新設定(格式化)HDFS 的檔案系統:
# ./resetHDFS.sh
按下 Enter 鍵之後,系統會詢問是否確認要執行,直接輸入〝yes〞,再按下 Enter 鍵來執行,最後就會看到 HDFS 檔案系統格式化之後的訊息:
不過,這邊要注意一件事情,就是使用〝resetHDFS.sh〞指令來格式化 HDFS 的檔案系統之後,HDFS 本身的服務會關閉(由終端機資訊就可以看到 NameNode 的機器關閉了),所以,若格式化之後,記得再利用〝start-all.sh〞的指令(在 NameNode 的終端機內執行)來啟動 HDFS 的服務。
接著回到本機(Host OS)的終端機內,這時大家應該會注意到,終端機的提示符號變為「HDFS:mapreduce>」,其實這是在〝hdfs.sh〞這隻程式內做了一點處理,讓使用者可以直接對後端的 HDFS 進行各種資料分析與處理。
在「HDFS:mapreduce>」的提示符號內輸入以下指令,可以查看目前 HDFS 的版本:
> hadoop version
再來,我們需要在 HDFS 內建立一個資料夾,以方便我們放置要分析的資料,指令如下:
> hadoop dfs -mkdir inputlog(inputlog 為資料夾名稱,可以自定)
不過,按下 Enter 鍵之後,卻有可能會看到如下的錯誤訊息:
這是什麼原因呢?其實,只是 DNS 無法解析虛擬電腦內,虛擬 IP 與電腦名稱的對應資訊罷了,這只需要修改 Host OS 內的 hosts 檔案即可,另外開啟一個終端機,並輸入〝sudo vim /etc/hosts〞,來開啟 hosts 的檔案,並輸入如下圖的內容,將虛擬電腦的 IP 與電腦名稱的對應關係寫好:
確認輸入資訊無誤之後,就可以存檔退出了。
再回到「HDFS:mapreduce>」的終端機視窗,重新輸入〝hadoop dfs -mkdir inputlog〞,但有可能有機會看到如下的錯誤訊息:
或
而此問題的原因,在於 HDFS 各個伺服器之間的連結(聯繫)上未完成 (safe mode),所以資料會無法寫入 HDFS 的資料庫內,只需要等待一會,再重新執行建立資料夾的指令即可。
資料上傳與分析
在 HDFS 內建立資料夾,接著利用以下指令,來上傳要分析的檔案,而這邊準備的是 Apache 的 Log 檔案,等會就要利用 MapReduce 來分析 Log 檔案內的 IP 資訊:
> hadoop dfs -put ge.myruby.net inputlog
> hadoop dfs -put wiki.myruby.net inputlog
那要使用 HDFS 來分析資料時,要用到 Mapper 與 Reducer 的方式來拆解與組合資料,所以要撰寫 MapReduce 的程式,而在 Hadoop 上面,主要是利用 Java 來撰寫程式與執行(當然,還有其他程式語言也可以,如 C ),不過,這邊筆者主要是要大家了解 HDFS 的運作方式,並不是程式語言的轉寫,所以有預先準備寫好的 java 程式,以減輕大家的負擔。
利用以下指令來編譯並打包準備好的 Java 程式:
> javac -d MyLog/ ApacheLog*.java
> jar -cvf apachelog.jar -C MyLog/ . (注意命令最後有句點)
最後,利用以下指令,就可以執行 MapReduce 的 Java 程式了:
> hadoop jar apachelog.jar ApacheLog inputlog/ output/ (注意 : output/ 目錄如存在, 請先移除,指令為〝hadoop dfs -rmr output〞)
分析完成之後,我們利用以下指令,來看看 output 資料夾內產生了哪些檔案:
> hadoop dfs -ls /user/root/output
其中,「part-r-00000」就是經由 MapReduce 分析之後的結果,利用以下指令就可以查看分析之後的結果:
> hadoop dfs -cat output/part-r-00000
如要關閉 HDFS 檔案系統, 請在 NN 虛擬電腦的終端機視窗, 執行 “byeall” 命令, 然後在原先操作終端機視窗中的 "HDFS:mapreduce>" 提示字串, 輸入 exit 命令, 便可完全脫離 HDFS 檔案系統操作.
以上,就是利用虛擬框架系統來快速建立與使用 HDFS 的方式。