標籤:

怎麼看hadoop的源碼,求大神指教?


因為目前所在公司的需要,老闆要我寫了一篇如何調試hadoop代碼的文章,之前一直在公司內部保存,今天拿出來了,地址如下:

http://note.youdao.com/yws/public/redirect/share?id=1a68ea9858c7e9d27148c00d9b42f694type=false

apache的trunk上fork一份到你的github,然後git clone下來, 自己建立一個分支,這樣便於你以後的管理。你可以關注一個點,比如 HDFS 文件的上傳走的過程是怎麼樣的,從這個做為切入點,研究下去。適當的時候修改一些源代碼,進行build,然後打包再運行。建議用 Linux 下做這些,當然Windows下你也可以做,只不過需要一些耐心了。當初我在 windows下做這些是因為公司沒有給我配 Linux 開發機,,,悲劇啊,我只有在 windows上搞了。。。Windows下的編譯參考,我當初就是這麼來的:
hadoop/BUILDING.txt at trunk · apache/hadoop · GitHub
給你一個鏈接,我當初build的時候遇到的問題,在windows下,我當時自己提的問題,也自己解決了。
Problems building hadoop 3.0.0-SNAPSHOT on Windows 7 64 bits and Java 8 and Maven3.3.3

光看還是不行的,你還需要進行一些practice, 比如, 你可以參考一下我的
這是我自己建立的一個分支, 替代 Java裡面的FileInputStream在 HDFS 中
New file of AltFileInputStream.java to replace FileInputStream.java in apache/hadoop/HDFS by hash-X · Pull Request #1 · hash-X/hadoop · GitHub

我的branch
hash-X/hadoop at AltFileInputStream · GitHub
解決如下的問題
[HDFS-8562] HDFS Performance is impacted by FileInputStream Finalizer

補充
比如你研究一個 分散式的benchmark跑分程序
hadoop/TestDFSIO.java at trunk · apache/hadoop · GitHub

和單個 客戶端的差別在於,這是一個分散式的
hadoop jar /root/hadoop-3.0.0-SNAPSHOT/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.0.0-SNAPSHOT-tests.jar TestDFSIO -write -nrFiles 5 -size 12GB

程序執行時候的熱點圖,這樣你就可以知道用到了哪些類,哪裡方法完成這樣的一個程序,而且可以根據你的熱點圖有針對性的進行JVM調優。


看hadoop,講真,應該有幾百萬行了。。。

看源碼第一,要帶目的,知道你想看什麼,想了解哪個奇淫實現。別瞎逛,這並不是什麼代碼市場。

第二,對軟體架構和軟體功能有簡單概念,不然你看不懂的,即便那些單詞你都認識。。。。。。

第三,良好的邏輯理解能力。看源碼的本質就是去閱讀作者的思維邏輯。

第四,不影響整體理解的話,不要太關注細枝末節,抓主幹。除非某些奇淫細節就是你想看。

第五,用好一點的ide。

第六,準備紙筆。

最後,耐心,坐得住!


簡單說一說我當初學習Hadoop的經驗吧~~

1. 買1~2本教材,推薦《Hadoop權威指南》
2. 自己根據官網的文檔搭建一個Hadoop環境,或者下載部署一個CDH,又或者直接下載Cloudera vmware,這對於Hadoop入門很重要
3. 根據教材所說,並參考官網文檔,一步一步操作、熟悉Hadoop
4. 在Hadoop官網下載src包,然後將其源碼導入IDE(Eclipse或者Intellij均可),根據不同的模塊開始閱讀源碼,梳理邏輯。比如Hadoop的MapReduce作業的執行邏輯(非常重要)、HDFS Shell是如何實現的、Hadoop RPC機制、Hadoop壓縮框架、Hadoop序列化機制等等。


推薦閱讀:

TAG:Hadoop | HBase | HDFS |