前幾天對hadoop分布式叢集的安裝過程進行了總結,對hadoop的叢集搭建只是學習hadoop中的艱難的一步,後面還需要學習更多的知識,不知道自己能不能堅持下去,不知道後面還會遇到多少困難,不過,我想,只要努力堅持下去,困難總是能夠解決的。這次主要總結對hadoop叢集測試相關的內容,對每個程式員而言,實踐是最好的老師,這個過程就好比初學編程時,學了很多理論知識,表面上知道是那麼一回事,一旦實踐起來,就手忙腳亂了,如果不實踐總覺得欠缺了什麼,下面來測試一下對前幾天安裝好的hadoop叢集,看看它到底好不好使?
這次測試主要分兩步,hdfs和map-reduce,看這兩個部分的功能是否正常:
一驗證hadoop的hdfs檔案系統功能是否正常
但是,應該如何驗證呢?我們知道,一個檔案系統是用於處理檔案相關的系統,包括檔案的複製,刪除,查看等,如果說它有這些功能,那就表示檔案系統是正常的。但是在我面前還是有一個問題,目前安裝好的hadoop叢集環境,它的hdfs檔案系統上應該是空的,首先得給它加點料才行,換句話說,從linux角度看,就是如何從linux的檔案系統將檔案拷貝至hadoop的hdfs中,這顯然是最基本的操作。其實這些問題,hadoop已經幫我們想好了,這裡,我們先把料準備好,也就是要上傳到hadoop的hdfs系統上的內容,過程如下:
在這裡,先建立兩個普通的檔案test1.txt和test2.txt,裡面編寫了幾個單詞。將這兩個檔案存放在linux的input目錄下。緊接著,需要以某種方式將這兩個檔案上傳至hdfs檔案系統中,這個過程主要靠以下命令完成:
hadoop:為程式名稱
dfs: 程式帶的一個參數,這個參數主要表示要操作的是dfs檔案系統
-put: 程式帶的一個參數,這個參數表示要將“上傳”這個動作
./: 程式帶的一個參數,這個參數表示上傳的源檔案路徑,在本例中,表示要將input目錄下的檔案上傳,所以為./
in: 這個參數表示上傳檔案的目的地址(路徑), 此時上傳至hdfs的主目錄下的in目錄中
第二條指令為顯示hdfs檔案系統中in目錄下的檔案內容。這些操作和linux有點類似,區別在於,hadoop系統將linux系統中的shell命令操作作為hdfs檔案系統的參數來執行操作,我認為這是一個好的思路,至少可以讓熟悉linux的朋友對hadoop感覺比較友好。通過第二條命令的顯示,可以看出,我們已經成功地將兩個檔案test1.txt和test2.txt上傳了,也成功在hadoop的hdfs檔案系統中顯示in目錄下的檔案操作。
但是還是不夠,我得試著看看能否在hdfs中實現檔案的複製功能,如下:
上述命令將test1.txt檔案產生一個拷貝,名稱為test1.txt.bak,通過看hdfs系統中的in目錄,可以看到這步操作是成功的。那麼,在hdfs檔案系統中如何刪除一個檔案呢?其實也很簡單,如:
可以看到,前面檔案的拷貝test1.txt.bak已經被成功刪除了。竟然我們可以將檔案上傳到hadoop的檔案系統中,那也應該可以將hadoop中的hdfs中的檔案給下載下來,這種實現也很簡單,與上傳類似,只要將參數-put,改為-get即可,如:
上述命令中,先建立一個空目錄,名為dir_from_hdfs,然後從hdfs中下載剛上傳的兩檔案,並將其成功下載至dir_from_hdfs中。
到這裡,我們簡單地總結一下前面的操作:
1 成功將linux檔案系統中的檔案拷貝至hdfs檔案系統中的某一個路徑下: hadoop dfs -put linux源檔案路徑 hadoop的hdfs檔案路徑
2 成功將hdfs檔案系統中的檔案拷貝至linux檔案系統中的某一個路徑下: hadoop dfs -get hadoop的hdfs檔案路徑 linux源檔案路徑
3 知道如何顯示hdfs檔案系統中的檔案: hadoop dfs -ls hdfs的檔案路徑
4 知道如何在hdfs檔案系統製作檔案的副本: hadoop dfs -cp 原檔案 目標檔案
5 知道如何在hdfs檔案系統中刪除某一個檔案: hadoop dfs -rm 要被刪除的目標檔案
6 如果要刪除hdfs上的檔案目錄呢?這裡不再展示,直接命令:hadoop dfs -rmr hdfs系統上的檔案目錄名
通過以上步驟的實踐,已經可以證明前次安裝的hadoop叢集中的hdfs檔案系統是能正常工作的。
二驗證hadoop的map-reduce功能是否正常
hadoop的hdfs實現檔案的管理操作,map-reduce主要實現作業的處理。如何來驗證map-reduce的功能正常與否呢?原理其實很簡單,可以利用hadoop內建的一個測試案例,我們輸入一個作業,然後執行map-reduce程式,讓它去處理操作作業,然後查看操作的結果是否正確,如果正確就可以表示map-reduce功能是正常的。首先,我們在hadoop上執行一個map-reduce程式(主要是實現對test1.txt和test2.txt檔案中出現的單詞進行計數):
對中的命令作一個簡單的解釋,如下:
hadoop jar ../hadoo/hadoop-0.20.2-examples.jar wordcount in out
程式名 java程式 java包 java包中的wordcount函數 輸入路徑 輸出路徑
實際上以上操作可以看成給hadoop叢集輸入一些材料,讓其處理,輸入的條件有兩個(這裡應該指的是檔案:test1.txt和test2.txt),然後map-reduce分配至各個結點進行作業的處理工作。如果不出現一些警告或錯誤就表示執行成功了。
執行完程式後再次查看hdfs檔案系統:
可以看出,hdfs檔案系統上多出一個out目錄,這是執行map-reduce程式後輸出結果的存放目錄。查看一下out目錄下有哪些內容:
如所示,out目錄中主要有兩項內容,其中一個是目錄,主要存放一些過程的日誌資訊,另一個是檔案,用於存放map-reduce的執行結果。
下面查看一下map-reduce執行的結果:
通過查看檔案內容,我們已經看到了程式的輸出結果,是正確的。因此這也就證明了map-reduce的功能是正常的。
以上是通過hadoop的hdfs檔案系統來查看檔案資料,這是很自然的事,但是如果從linux檔案系統的角度來查看hadoop中hdfs上的檔案資料時,是怎樣的呢?如:
由於在hdfs檔案系統中,資料是存放在datanode中,因此應該從slave結點中查看。由可以看出,hdfs系統上的檔案如果從linux角度上來看,主要是一些中繼資料和一些資料項目,這兩者才構成一個完整的檔案,也就是說在linux角度查看hdfs檔案的資料內容時,是一堆亂七八糟的東西,是沒有任何意義的。
最後,提醒下自己,查看hadoop的hdfs情況及叢集namenode情況也可以在web網站中查看,在安裝叢集中顯示的那兩個網站,這個主要是從視圖上方便查看。
http://192.168.1.100:50030
http://192.168.1.100:50070
補充:
1通過命令查看hadoop中的hdfs的基本統計資訊操作:
2 如何進入和退出hadoop的安全模式
來自:http://blog.csdn.net/ab198604