Hadoop學習筆記(10) ——搭建源碼學習環境

來源:互聯網
上載者:User

標籤: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函數入手。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.