標籤:style blog http java strong 檔案 資料 ar
Hadoop學習筆記(10)
——搭建源碼學習環境
上一章中,我們對整個hadoop的目錄及源碼目錄有了一個初步的瞭解,接下來計劃深入學習一下這頭神象作品了。但是看代碼用什麼,難不成gedit?,單步調試呢? 看程式不能調那多痛苦啊,想看跟蹤一下變數,想看一下執行路徑都難。
所以這裡,我們得把這個調試環境搭建起來。Hadoop的主要代碼是用java編寫的,所以這裡就選用eclipse作為環境。
Hadoop目錄下,本身就可以為作eclipse的一個工程來操作,但這裡我不想,我想自己來建一個工程,然後把它的代碼自己添加進來。
建立一普通的java工程:
點下一步,輸入工程名:HadoopSrcStudy,然後再下一步
然後一路下一步,再Finish完成:
接下來,添加源碼了,開啟hadoop下面的src檔案夾,複製哪些呢? 我們先學學核心的吧,core,hdfs,marped這三個目錄,複製到工程裡面。(如何複製? 先在選中三個檔案夾,然後回到eclipse中,選中HadoopSrcStudy工程,然後直接按一下ctrl+v)
好了,進來了,但現在這三個檔案夾還不能當成源碼進行編譯,所以我們右健工程屬性:
然後選中Java Build Path,在右邊的tab頁選中Source,然後點Add Folder:
在彈出頁面中,選中core、hdfs、mapred三個目錄,然後點兩次OK,完成設定。
然後再看工程,這三個目錄已經跟src檔案夾的表徵圖一樣了,所以裡面的java程式也就當成了源碼,進行了編譯,但發現2K多個Error。怎麼回事?難不成還要引用其他的源碼檔案? 答案是少jar包。
所以我們先在源碼目錄下建一個jar的檔案夾。然後將以下目錄下的jar檔案都複製進來。
hadoop-0.20.2/build/ivy/lib/Hadoop/common/*.jar
hadoop-0.20.2/lib/jsp-2.1/*.jar
hadoop-0.20.2/lib/kfs-0.2.2.jar
hadoop-0.20.2/lib/hsqldb-1.8.0.10.jar
然後右健工程,選屬性頁面,在BuildPath頁,選Libraiers:
點擊Add Jars:
選擇jar檔案夾下所有的jar檔案,然後點兩次OK。
這些發現bug立即減少:
但還是有,而且都只是這個RccTask檔案裡的,所以暫時先排掉吧,對著該檔案右健菜單Build Path->Exclude即可。
好了,此時一個bug也沒有了。
然後將hadoop-0.20.2目錄下conf檔案夾下的core-site.xml、hdfs-site.xml、mapred-site.xml、log4j.properties這幾個檔案,放在src目錄下,
將hadoop-0.20.2目錄下src檔案夾下的,webapps複製到src目錄下。
在eclipse中,src目錄下建一個package,名為:org.apache.hadoop,然後將hadoop-0.20.2\build\src\org\apahe\hadoop\package-info.java檔案,複製到該package下。目錄如下:
這樣源碼調試環境就OK了。
讓Hadoop在eclipse中運行起來
源碼已經加入,並且已經編譯通過了,接下來得在eclipse中跑一下,試下是否能正常跑起來。
這裡我們嘗試,用命令列中執行namenode,然後用eclipse運行datanode,然後再開一個命令列,用fs命令,是否能查到之前的內容。
1.開啟命令列,進入hadoop-0.20.2目錄,執行bin/hadoop namenode
2.在eclipse中,進入hdfs目錄,再進入org.apache.hadoop.hdfs.server.datanode目錄,開啟DataNode.java檔案,然後點上面的運行,然後就可以看到在eclipse中,正常的輸出資訊,且沒有錯誤。該資訊,可以在log檔案夾下,找到datanode的日誌,其內容是一樣的。 同時在前面的命令列表單中,可以看到namenode程式中收到一個datanode的接入請求。
3.再開啟一個命令列視窗,進入hadoop-0.20.2目錄bin/hadoop fs –ls,就可以看到輸出了檔案清單。
4.然後再輸入命令bin/hadoop fs -cat out/* 就可以看到之前程式運行產生在out目錄下的資料了。
如果上面兩個命令都執行成功,說明namenode和在eclipse中啟動並執行datanode都起作用了。可以再觀察下,當我們在執行cat命令時,在eclipse中的輸出框中,看到有新的響應輸出,說明它工作了。
同樣,我們還可以反過來,在eclipse中運行namenode,在命令列中運行datanode。同樣的效果。
為了可以看到更多的調試日誌輸出,我們還可以開啟src下的log4j.properties檔案,在第二行中的INFO改成DEBUG,這樣輸出的內容會更詳細。
到此為止我們的源碼學習環境已經搭建好了,可以方便的在eclipse中調試hadoop代碼,甚至來修改它。
好了~~至此,第一季收工。 讓思維飛一會兒,等後面看了些hadoop源碼後,再來分享。 到時還會保持一向的處理方式:從簡單入手。 程式分析就會main函數入手。