快速閱讀Hadoop代碼有什么方法
程序員在做程序的時(shí)候需要敲打大量的代碼,這就需要程序員要有快速閱讀代碼的能力。那么,要怎么快速閱讀這些代碼呢?下面小編為你整理快速閱讀Hadoop代碼方法,希望能幫到你。
快速閱讀hadoop代碼的方法
一、學(xué)習(xí)hadoop基本使用和基本原理
這是第一個(gè)階段,你開始嘗試使用hadoop,從應(yīng)用層面,對(duì)hadoop有一定了解,一旦你對(duì)hadoop的基本使用方法比較熟悉了,接下來可以嘗試了解它的內(nèi)部原理,注意,不需要通過閱讀源代碼了解內(nèi)部原理,只需看一些博客,書籍,比如《Hadoop權(quán)威指南》,對(duì)于HDFS而言,你應(yīng)該知道它的基本架構(gòu)以及各個(gè)模塊的功能;對(duì)于MapReduce而言,你應(yīng)該知道其具體的工作流程,知道partition,shuffle,sort等工作原理,可以自己在紙上完整個(gè)畫完mapreduce的流程,越詳細(xì)越好。
在這個(gè)階段,建議你多看一些知名博客,多讀讀《hadoop權(quán)威指南》。如果你有實(shí)際項(xiàng)目驅(qū)動(dòng),那是再好不過了,理論聯(lián)系實(shí)際是最好的hadoop學(xué)習(xí)方法。
二、開始閱讀hadoop源代碼
這個(gè)階段是最困苦和漫長(zhǎng)的,尤其對(duì)于那些沒有任何分布式經(jīng)驗(yàn)的人。 很多人這個(gè)階段沒有走完,就放棄了,最后停留在hadoop應(yīng)用層面。
這個(gè)階段,第一件要做的事情是,選擇一個(gè)hadoop組件。如果你對(duì)分布式存儲(chǔ)感興趣,那么你可以選擇HDFS,如果你讀分布式計(jì)算感興趣,你可以選擇MapReduce,如果你對(duì)資源管理系統(tǒng)感興趣,你可以選擇YARN。
選擇好系統(tǒng)后,接下來的經(jīng)歷是最困苦的。當(dāng)你把hadoop源代碼導(dǎo)入eclipse或intellij idea,沏上一杯茶,開始準(zhǔn)備優(yōu)哉游哉地看hadoop源代碼時(shí),你懵逼了:你展開那數(shù)不盡的package和class,覺得無(wú)從下手,好不容易找到了入口點(diǎn),然后你屁顛屁顛地通過eclipse的查找引用功能,順著類的調(diào)用關(guān)系一層層找下去,最后迷失在了代碼的海洋中,如同你在不盡的壓棧,最后棧溢出了,忘記在最初的位置。
如果你正在經(jīng)歷這個(gè)過程,我的經(jīng)驗(yàn)如下:首先,你要摸清hadoop的代碼模塊,知道client,master,slave各自對(duì)應(yīng)的模塊,并在閱讀源代碼過程中,時(shí)刻謹(jǐn)記你當(dāng)前閱讀的代碼屬于哪一個(gè)模塊,會(huì)在哪個(gè)組件中執(zhí)行;之后你需要摸清各個(gè)組件的交互協(xié)議,也就是分布式中的RPC,這是hadoop自己實(shí)現(xiàn)的,你需要對(duì)hadoop RPC的使用方式有所了解,然后看各模塊間的RPC protocol,到此,你把握了系統(tǒng)的骨架,這是接下來閱讀源代碼的基礎(chǔ);接著,你要選擇一個(gè)模塊開始閱讀,我一般會(huì)選擇Client,這個(gè)模塊相對(duì)簡(jiǎn)單些,會(huì)給自己增加信心,為了在閱讀代碼過程中,不至于迷失自己,建議在紙上畫出類的調(diào)用關(guān)系,邊看邊畫,我記得我閱讀hadoop源代碼時(shí),花了一疊紙。
在這個(gè)階段,建議大家多看一些源代碼分析博客和書籍。借助這些博客和書籍,你可以在前人的幫助下,更快地學(xué)習(xí)hadoop源代碼,節(jié)省大量時(shí)間。
這個(gè)階段最終達(dá)到的目的,是對(duì)hadoop源代碼整體架構(gòu)和局部的很多細(xì)節(jié),有了一定的了解。這個(gè)階段完成后,當(dāng)你遇到問題或者困惑點(diǎn)時(shí),可以迅速地在Hadoop源代碼中定位相關(guān)的類和具體的函數(shù),通過閱讀源代碼解決問題,這時(shí)候,hadoop源代碼變成了你解決問題的參考書。
三、根據(jù)需求,修改源代碼。
這個(gè)階段,是驗(yàn)證你閱讀源代碼成效的時(shí)候。你根據(jù)leader給你的需求,修改相關(guān)代碼完成功能模塊的開發(fā)。在修改源代碼過程中,你發(fā)現(xiàn)之前閱讀源代碼仍過于粗糙,這時(shí)候你再進(jìn)一步深入閱讀相關(guān)代碼,彌補(bǔ)第二個(gè)階段中薄弱的部分。
當(dāng)然,很多人不需要經(jīng)歷第三個(gè)階段,僅僅第二階段就夠了:一來能夠通過閱讀代碼解決自己長(zhǎng)久以來的技術(shù)困惑,滿足自己的好奇心,二來從根源上解決解決自己遇到的各種問題。 這個(gè)階段,沒有太多的參考書籍或者博客,多跟周圍的同事交流,通過代碼review和測(cè)試,證明自己的正確性。
7個(gè)提高代碼質(zhì)量的個(gè)技巧
1.測(cè)試驅(qū)動(dòng)開發(fā)(TDD)
如果說要找一個(gè)最能提高代碼質(zhì)量同時(shí)還要減少bug的實(shí)踐練習(xí)恐怕就非TDD莫屬了。它的優(yōu)點(diǎn)是適用于任何類型的項(xiàng)目和敏捷開發(fā)。其歷史可以追溯到很早以前,但是直到XP的普及它才漸漸為人所知。當(dāng)作為能自動(dòng)化構(gòu)建和測(cè)試實(shí)踐的持續(xù)集成周期的一部分運(yùn)作的時(shí)候,它被稱為單元測(cè)試。
很多開發(fā)人員并不知道該怎么提高這方面的能力,這需要培訓(xùn)和教育。而且這是一個(gè)學(xué)習(xí)和積累的過程,不要想著能一夜吃成個(gè)胖子。
2.驗(yàn)收測(cè)試驅(qū)動(dòng)開發(fā)(ATDD)
這是基于TDD單元測(cè)試之后的一個(gè)新的水平。這不但表明了驗(yàn)收標(biāo)準(zhǔn),而且還能在開發(fā)工作開始之前自動(dòng)執(zhí)行開發(fā)需求。在很多情況下,需要專業(yè)測(cè)試人員和客戶攜手共同參與到測(cè)試中去。
3.持續(xù)集成(CI)
這能確保新代碼不會(huì)干擾到已經(jīng)存在的代碼。如果再加上TDD和ATDD一起創(chuàng)建一個(gè)自動(dòng)化、可重復(fù)的的測(cè)試套件,將會(huì)大幅度提高其使用價(jià)值。
4.結(jié)對(duì)編程
有關(guān)于結(jié)對(duì)編程的爭(zhēng)論似乎已經(jīng)偃旗息鼓了,同樣的人們實(shí)際應(yīng)用的例子也越來越少。這不可謂不是一個(gè)遺憾。因?yàn)樵诩磿r(shí)的代碼審查上,兩個(gè)腦袋總比一個(gè)管用。它也允許開發(fā)人員將注意力全部灌注到手頭的工作上——不必分心于電話、郵件、短信等等,因?yàn)槲覀兊膒artner會(huì)搞定。
5.代碼審查
如果沒辦法結(jié)對(duì)編程,那么退而求其次,至少得進(jìn)行一次代碼審查。最好代碼一寫好就能落實(shí)到位一個(gè)輕量級(jí)流程的代碼審查。我們?cè)趯W(xué)校里學(xué)的那種又大又正規(guī)的流程其實(shí)并不實(shí)際——只有NASA( 美國(guó)宇航局)這種不差錢的土豪才買得起。所以換個(gè)輕量級(jí)的流程,意味著只需20%的成本就能享受80%的相同效果。
6.靜態(tài)分析工具
以前人人都不看好所謂的靜態(tài)分析工具?,F(xiàn)在則好了很多,雖然它們?nèi)匀徊⒉荒苷嬲娲a審查,但是其使用成本比較低。當(dāng)然可能需要購(gòu)買許可證,但是一旦將它們?cè)O(shè)置進(jìn)系統(tǒng)中之后,以后每一次我們輸入代碼,它們都會(huì)一絲不茍兢兢業(yè)業(yè)地檢查并且快速提示發(fā)現(xiàn)的所有錯(cuò)誤。
7.編碼標(biāo)準(zhǔn)
老實(shí)說我并不怎么喜歡編碼標(biāo)準(zhǔn)。從我的經(jīng)驗(yàn)來看,很多團(tuán)隊(duì)在討論編碼標(biāo)準(zhǔn)上面浪費(fèi)了太多的時(shí)間,而且一旦確定了某種標(biāo)準(zhǔn),這往往會(huì)損害一部分開發(fā)人員的利益。不過如果我們能克服這些問題,那么絕對(duì)會(huì)有意想不到的效果。
首先建立一個(gè)討論小組——應(yīng)該以一種面對(duì)面的形式,不要通過電子郵件和電話——討論出編碼標(biāo)準(zhǔn)里應(yīng)該包含哪些內(nèi)容。找到需要討論的地方,規(guī)分為不同的類別:少許定位為必選項(xiàng)目,推薦項(xiàng)目的數(shù)量可以較前者多點(diǎn),候選項(xiàng)目則可以更多。在候選組里的需要經(jīng)過深思熟慮之后才能放到推薦組和必選組中。剩下的第四組則是明確不能成為編程標(biāo)準(zhǔn)的內(nèi)容。
每隔三至四個(gè)月檢查一下這些標(biāo)準(zhǔn),看看有沒有需要從候選組提升到推薦組,或者從推薦組放到必選組的,要是發(fā)現(xiàn)什么已經(jīng)不適應(yīng)當(dāng)前工作的項(xiàng)目,那就盡快刪除或者降級(jí)。
此外,我們不應(yīng)該將編碼標(biāo)準(zhǔn)當(dāng)做代碼審查的一部分,而是兩手都要抓,兩手都要硬,萬(wàn)一不得不遺漏其中之一,可以借助自動(dòng)化工具,例如運(yùn)行靜態(tài)分析工具,自動(dòng)執(zhí)行代碼標(biāo)準(zhǔn)來檢查代碼。
快速閱讀方法相關(guān)文章:
5.如何才能快速閱讀
快速閱讀Hadoop代碼有什么方法
上一篇:英語(yǔ)快速閱讀有什么技巧
下一篇:快速閱讀記憶有什么方法