畢業(yè)論文-云計(jì)算研究及hadoop應(yīng)用程序開發(fā)_第1頁(yè)
畢業(yè)論文-云計(jì)算研究及hadoop應(yīng)用程序開發(fā)_第2頁(yè)
畢業(yè)論文-云計(jì)算研究及hadoop應(yīng)用程序開發(fā)_第3頁(yè)
畢業(yè)論文-云計(jì)算研究及hadoop應(yīng)用程序開發(fā)_第4頁(yè)
畢業(yè)論文-云計(jì)算研究及hadoop應(yīng)用程序開發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

畢業(yè)論文云計(jì)算研究及hadoop應(yīng)用程序開發(fā)1緒論在2007年云計(jì)算被正式提出,它是一個(gè)全新的概念,到現(xiàn)在為止,大多數(shù)IT界的行業(yè)大佬都將云計(jì)算的發(fā)展作為其未來(lái)的重要戰(zhàn)略之一,其它有關(guān)的互聯(lián)網(wǎng)商業(yè)企業(yè)家也是相當(dāng)重視云計(jì)算的發(fā)展,云計(jì)算的未來(lái)的發(fā)展的前景毋庸置疑。云計(jì)算的基礎(chǔ)原理是,經(jīng)過(guò)將計(jì)算數(shù)據(jù)分布在海量的裝有分布式架構(gòu)的計(jì)算機(jī)上,這樣企業(yè)數(shù)據(jù)中心的運(yùn)行主要是使用互聯(lián)網(wǎng)。從而使企業(yè)能夠?qū)㈦S時(shí)資源切換到需要的應(yīng)用上,根據(jù)需求訪問(wèn)計(jì)算機(jī)和存儲(chǔ)系統(tǒng)。云計(jì)算已經(jīng)深刻地影響著整個(gè)IT產(chǎn)業(yè)。云計(jì)算是在分布式計(jì)算、網(wǎng)格計(jì)算、并行計(jì)算等發(fā)展的基礎(chǔ)上提出的一種新型計(jì)算模型,是一種新興的共享基礎(chǔ)架構(gòu)的方法。它將帶來(lái)工作方式和商業(yè)模式的根本性改變。我們的生活已經(jīng)與互聯(lián)網(wǎng)密不可分,云計(jì)算的發(fā)展足一種不可逆轉(zhuǎn)的趨勢(shì)。hadoop是開源組織其中一個(gè)分布式的計(jì)算框架,這個(gè)架構(gòu)可以運(yùn)行在大型集群上,為程序提供了一個(gè)可靠和穩(wěn)定的接口環(huán)境。這個(gè)框架是一項(xiàng)比較新穎的技術(shù),但是它發(fā)展也是相當(dāng)快速,研究其發(fā)展的原因,第一這個(gè)架構(gòu)將并行計(jì)算“平民化”,hadoop對(duì)開發(fā)程序員來(lái)說(shuō),屏蔽了并行開發(fā)應(yīng)用程序的細(xì)節(jié),這樣開發(fā)應(yīng)用的程序員主要把精力放到業(yè)務(wù)邏輯上。然后Hadoop框架也能運(yùn)行于一般的PC集群上,節(jié)約了很多開發(fā)成本,這樣也可以讓個(gè)人研究、應(yīng)用Hadoop分布式系統(tǒng)更方便了??偟膩?lái)說(shuō),本文有以下幾方面的意義:1).隨著發(fā)展所有的企業(yè)數(shù)據(jù)量越來(lái)越大,那么怎樣對(duì)大量數(shù)據(jù)進(jìn)行合理管理成為了企業(yè)的重要問(wèn)題。如果利用云存儲(chǔ)技術(shù)解決這個(gè)問(wèn)題,無(wú)疑會(huì)提高企業(yè)的經(jīng)濟(jì)效益。2).HDFS可以實(shí)施運(yùn)行在普通的PC集群上,極大降低了實(shí)施運(yùn)行分布式系統(tǒng)的成本。3).對(duì)分布式文件管理系統(tǒng)的研究可以應(yīng)用到別的集群存儲(chǔ)技術(shù)研究上,為接下來(lái)的研究打好基礎(chǔ)。1.3.1國(guó)外進(jìn)展云計(jì)算從2007年就在國(guó)外開始萌芽,首先對(duì)它的發(fā)展做一個(gè)簡(jiǎn)單介紹,2007年7月IBM做出“蘭云計(jì)劃”這意味這云計(jì)算將是IBM未來(lái)發(fā)展的一個(gè)重點(diǎn)業(yè)務(wù)。在云計(jì)算發(fā)面,IBM有很多有利條件,比如說(shuō)服務(wù)器、存儲(chǔ)、管理軟件等等,這樣IBM有機(jī)會(huì)擴(kuò)展自己的業(yè)務(wù)領(lǐng)域。在2007年11月的時(shí)候,Google宣布了自己的云計(jì)算,與此同時(shí)將與IBM合作,并且把世界上很多高校納入“云計(jì)算”當(dāng)中,同時(shí)開始跟IBM的合作,現(xiàn)在在美國(guó)好多大學(xué)開始推廣他們的計(jì)劃,并且為這些大學(xué)提供了技術(shù)和硬件上的支持,希望這樣可以節(jié)約成本。世界著名的電商公司“亞馬遜”,在2007年的時(shí)候開放了名為“彈性計(jì)算機(jī)云”的相關(guān)服務(wù),這樣小公司可以購(gòu)買他們的資源,不用再去花費(fèi)很大的硬件成本,這兩年亞馬遜的云計(jì)算收入一直在增加。除了以上這些公司以外,還有很多大公司都在與時(shí)俱進(jìn)的開展云計(jì)算研究和服務(wù),其中有微軟、雅虎等,都有云計(jì)算的相關(guān)研究和開發(fā)。1.3.2國(guó)內(nèi)進(jìn)展在我國(guó),云計(jì)算發(fā)展也非常迅猛。其中互聯(lián)網(wǎng)行業(yè)巨頭都已經(jīng)開始了相應(yīng)的云計(jì)算研究項(xiàng)目,比如阿里巴巴推出了“阿里云”的項(xiàng)目,2008年IBM在北京也創(chuàng)建了第二家中國(guó)的云計(jì)算中心,2009年11月11日,全國(guó)首家云計(jì)算產(chǎn)業(yè)協(xié)會(huì)在深圳成立,協(xié)會(huì)的成立標(biāo)志深圳市政府對(duì)于云計(jì)算產(chǎn)業(yè)在未來(lái)發(fā)展的高度重視,同時(shí)標(biāo)志著深圳市企業(yè)對(duì)于云計(jì)算研究及應(yīng)用領(lǐng)域的關(guān)注與信心,深圳市高科技產(chǎn)業(yè)發(fā)展邁向成熟,而云計(jì)算產(chǎn)業(yè)則給深圳信息產(chǎn)業(yè)帶來(lái)新的商機(jī),當(dāng)前深圳是全國(guó)首個(gè)大力發(fā)展云計(jì)算的城市,現(xiàn)在有100多家企業(yè)從事云計(jì)算相關(guān)產(chǎn)業(yè)研究和技術(shù)開發(fā)等,未來(lái)產(chǎn)業(yè)將蘊(yùn)藏巨大的商機(jī)。

2009年12月中國(guó)云計(jì)算技術(shù)與產(chǎn)業(yè)聯(lián)盟在京成立,四十多家企業(yè)一起共同倡議成立中國(guó)云計(jì)算技術(shù)與產(chǎn)業(yè)聯(lián)盟。2010年8月上海公布云計(jì)算發(fā)展戰(zhàn)略,上海的目標(biāo)很明確:打造亞太地區(qū)的云計(jì)算中心。在廣泛的文獻(xiàn)調(diào)研基礎(chǔ)上,本論文主要對(duì)基于Hadoop的云計(jì)算理論和基于Hadoop的分布式云計(jì)算環(huán)境進(jìn)行研究,具體包括:Hadoop構(gòu)架及實(shí)現(xiàn)原理MapReduce,GoogleFileSystem相關(guān)資料、搭建Hadoop運(yùn)行環(huán)境和實(shí)現(xiàn)簡(jiǎn)單的一個(gè)基于Hadoop分布式運(yùn)行程序。本文主要以云計(jì)算與Hadoop為主題進(jìn)行擴(kuò)展研究,涉及下面三個(gè)方面的內(nèi)容:1).廣泛查閱資料的基礎(chǔ)上,對(duì)云計(jì)算的背景以及國(guó)內(nèi)外的發(fā)展現(xiàn)狀進(jìn)行了一個(gè)很全面的了解。云計(jì)算的基本的概念以及發(fā)展前期其他計(jì)算模式的歷程,在這十年間的歷程中云計(jì)算逐漸走向應(yīng)用,它的特點(diǎn)和優(yōu)勢(shì),對(duì)我們現(xiàn)今生活方式的改變起了很大的作用。云計(jì)算的普遍應(yīng)用能更加使資源的利用更合理更節(jié)約更安全。2).這部分對(duì)Hadoop的文件系統(tǒng)HDFS做了一些介紹,還有MapReduce相關(guān)的知識(shí)。 Hadoop是怎么構(gòu)架以及實(shí)現(xiàn)的原理 通過(guò)與GFS文件系統(tǒng)的比較更深入了解分布式系統(tǒng)的構(gòu)架,3).先安裝虛擬機(jī),在虛擬機(jī)上安裝ubuntu11.04系統(tǒng),然后安裝java、ssh等Hadoop所需的環(huán)境,然后配置一下系統(tǒng)的環(huán)境變量,和Hadoop的配置文件,以便能運(yùn)行Hadoop,最后用MapReduce的思想編一個(gè)分布式運(yùn)行程序WordCount實(shí)例,我們只需要寫出其Map類和Reduce的類就行,其他的分布運(yùn)行的細(xì)節(jié)全部由Hadoop來(lái)實(shí)現(xiàn)。只需簡(jiǎn)單的幾行代碼,就可以讓許多機(jī)器為你工作。

2云計(jì)算相關(guān)背景云計(jì)算指的是分布式處理、并行處理和網(wǎng)格計(jì)算的綜合性發(fā)展,也可以說(shuō)是以上這些計(jì)算科學(xué)概念的技術(shù)實(shí)現(xiàn),當(dāng)然也是更有效計(jì)算、虛擬化、Haas、SaaS、PaaS等技術(shù)結(jié)合創(chuàng)新的結(jié)果。2.1.1云計(jì)算基本概念云計(jì)算是一種革命性的突破,它表示計(jì)算能力也可作為一種商品進(jìn)行流通,當(dāng)然這種商品是通過(guò)互聯(lián)網(wǎng)進(jìn)行傳輸?shù)?。云?jì)算的最主要目標(biāo)就是:在來(lái)來(lái),只需要一臺(tái)筆記本或者一個(gè)手機(jī),就可以通過(guò)網(wǎng)絡(luò)服務(wù)來(lái)得到我們需要的一切服務(wù),甚至包括實(shí)現(xiàn)超級(jí)計(jì)算這樣的任務(wù)。從這個(gè)角度而言,最終用戶將成為云計(jì)算的真正擁有者。從硬件的角度來(lái)看,云計(jì)算有三個(gè)方面是新的:1).計(jì)算資源看似是無(wú)限的,但是你可以根據(jù)需要獲取,因此用戶不需要做很久的資源規(guī)劃。2).用戶不需要前期硬件和軟件的投入,這樣可以使公司節(jié)約成本有利于發(fā)展,因此也相當(dāng)于降低了風(fēng)險(xiǎn)。3).云計(jì)算資源能夠以時(shí)間為單位,付費(fèi)購(gòu)買計(jì)算資源,用完之后釋放這些資源就可以,這樣,可以節(jié)約資源和開支,提供了資源利用效率,云計(jì)算的具體形式,許多公司聯(lián)合分析和對(duì)用戶做了調(diào)查,得出云計(jì)算的幾個(gè)形式。1).平臺(tái)即服務(wù)(PlatformasaService,PaaS)平臺(tái)即服務(wù)是指集成SaaS(SoftwareasaService),HaaS(HardwareasaService),DaaS(DataasaService)的復(fù)合系統(tǒng),這種形式的云計(jì)算把開發(fā)環(huán)境作為一種服務(wù)來(lái)提供。2).管理服務(wù)提供商(ManageServiceProvider,MSP)管理服務(wù)提供商可以稱作最古老的云計(jì)算運(yùn)用之一。這種應(yīng)用更多的是面向IT行業(yè)而不是終端用戶,常用于郵件病毒掃描、程序監(jiān)控等等。一些大型的公司集團(tuán)更加可能使用這種服務(wù)。3).商業(yè)服務(wù)平臺(tái)(CommercialServicePlatform,CSP)互聯(lián)網(wǎng)商業(yè)平臺(tái)服務(wù)一般是MSP和SaaS的混合使用,這類云計(jì)算可以為用戶和開發(fā)商之間的互動(dòng)提供了穩(wěn)定、高效一個(gè)平臺(tái),這樣一定程度上做到了量身定做的程度,例如個(gè)人用戶開支管理系統(tǒng),能夠根據(jù)個(gè)人用戶的設(shè)定來(lái)管理他的開支和協(xié)調(diào)其訂購(gòu)的各種各樣服務(wù)。2.1.2云計(jì)算的特點(diǎn)和優(yōu)勢(shì)云計(jì)算作為分布式計(jì)算的優(yōu)勢(shì):1).云計(jì)算的分布式架構(gòu)的最大的優(yōu)點(diǎn)是因?yàn)樗哂懈鼜?qiáng)于集中式架構(gòu)的性能,個(gè)人用戶可以花最少的錢,獲得最高效的計(jì)算服務(wù)。2).多數(shù)應(yīng)用本身就是分布式的。比如公司應(yīng)用程序,可以使管理和現(xiàn)場(chǎng)不一定在同一個(gè)地方。3).可靠性高。生物進(jìn)化的條件是產(chǎn)生冗余,并且這也適用于信息技術(shù),現(xiàn)在的分布式架構(gòu)系統(tǒng)具有相當(dāng)高的容錯(cuò)機(jī)制,這樣以來(lái)核反應(yīng)推的控制機(jī)制都是用分布式系統(tǒng)實(shí)現(xiàn)的。云計(jì)算在存儲(chǔ)領(lǐng)域的發(fā)展趨勢(shì)和優(yōu)勢(shì)1).用戶不必為文件存儲(chǔ)硬件投入任何前期的費(fèi)用。2).主機(jī)服務(wù)提供商會(huì)維護(hù)用戶文件服務(wù)器的安全和更新問(wèn)題。3).方便的控制訪問(wèn)權(quán)限和文件資源管理。3Hadoop平臺(tái)研究在云計(jì)算技術(shù)中,編程平臺(tái)是一個(gè)非常重要的模塊。Hadoop平臺(tái)是當(dāng)今應(yīng)用最為廣泛的開源云計(jì)算編程平臺(tái),本章詳細(xì)介紹了Hadoop平臺(tái)的組成。3.1.1Hadoop概述Hadoop的優(yōu)點(diǎn)在于:1).可擴(kuò)展:不論是計(jì)算可擴(kuò)展性還是存儲(chǔ)的可擴(kuò)展性都是Hadoop的設(shè)計(jì)基礎(chǔ),Hadoop的擴(kuò)展相當(dāng)簡(jiǎn)單,不需要修改任何一個(gè)已有的結(jié)構(gòu)。2).經(jīng)濟(jì):hadoop框架可以運(yùn)行于任何一個(gè)普通計(jì)算機(jī)上,沒(méi)有特殊的硬件要求。。3).可靠:HDFS分布式文件系統(tǒng)的備份和恢復(fù)原理以及MapReduce的任務(wù)監(jiān)控保證了分布式處理數(shù)據(jù)的可靠性,Hadoop默認(rèn)就可以提供1個(gè)以上的備份。4).高效:分布式文件系統(tǒng)的高效數(shù)據(jù)交互實(shí)現(xiàn)以及MapReduce結(jié)合LocalData處理的模式,為高效處理海量的信息作了基礎(chǔ)準(zhǔn)備。3.1.2HDFS介紹HDFS采用master/slave架構(gòu)。HDFS集群是由一個(gè)Datanodes和一定數(shù)目的Namenode組成。集群中的Datanode一般是一個(gè)節(jié)點(diǎn)一個(gè),負(fù)責(zé)管理它所在節(jié)點(diǎn)卜的存儲(chǔ)。HDFS暴露了文件系統(tǒng)的名字空間,用戶能夠以文件的形式在上面存儲(chǔ)數(shù)據(jù)。amenode是一個(gè)中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的名字空間以及客戶端對(duì)文件的訪問(wèn)。從里邊看,一個(gè)數(shù)據(jù)其實(shí)被分割成一個(gè)或多個(gè)數(shù)據(jù)塊,這些塊存儲(chǔ)在一組Datanode上。Namenode執(zhí)行文件系統(tǒng)的名字空間操作,例如打開、關(guān)閉、重命名文件或目錄。它也負(fù)責(zé)確定數(shù)據(jù)塊到具體Datanode節(jié)點(diǎn)的映射。Datanode負(fù)責(zé)處理文件系統(tǒng)客戶端的讀寫請(qǐng)求。在Namenode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制。圖3.1是HDFS的一個(gè)結(jié)構(gòu)示意。圖3-1HDFS體系結(jié)構(gòu)HDFS的Namenode和Datanode被設(shè)計(jì)成可以在普通的商用機(jī)器上運(yùn)行的節(jié)點(diǎn)。這些機(jī)器一般運(yùn)行GNU/Linux操作系統(tǒng)。集群中單一Namenode的結(jié)構(gòu)大大簡(jiǎn)化了系統(tǒng)的架構(gòu)。為了增加系統(tǒng)的穩(wěn)定性,一般系統(tǒng)中都還存在Namenode的一個(gè)備份,SecondaryNamenode。3.1.3MapReduce介紹MapReduce[12]是一個(gè)編程模型和處理產(chǎn)生大數(shù)據(jù)集的相關(guān)實(shí)現(xiàn)。用戶指定一個(gè)map函數(shù)處理一個(gè)key/value對(duì),從而產(chǎn)生中間的key/value對(duì)集。然后再指定一個(gè)reduce函數(shù)合并所有的具有相同中間key的中間value。下面將列舉許多可以用這個(gè)模型來(lái)表示的現(xiàn)實(shí)世界的工作。以這種方式寫的程序能自動(dòng)的在大規(guī)模的普通機(jī)器上實(shí)現(xiàn)并行化。我們的MapReduce實(shí)現(xiàn)運(yùn)行在規(guī)??梢造`活調(diào)整的由普通機(jī)器組成的機(jī)群上,一個(gè)典型的MapReduce計(jì)算處理幾千臺(tái)機(jī)器上的以TB計(jì)算的數(shù)據(jù)。Hadoop中的Map/Reduce是一個(gè)使用簡(jiǎn)易的軟件框架,基于它寫出來(lái)的應(yīng)用程序能夠運(yùn)行在由上千個(gè)商用機(jī)器組成的大型集群上,并以一種可靠容錯(cuò)的方式并行處理上T級(jí)別的數(shù)據(jù)集。一個(gè)Map/Reduce作業(yè)(job)通常會(huì)把輸入的數(shù)據(jù)集切分為若干獨(dú)立的數(shù)據(jù)塊,由map任務(wù)(task)以完全并行的方式處理它們??蚣軙?huì)對(duì)map的輸出先進(jìn)行排序,然后把結(jié)果輸入給reduce任務(wù)。而slave僅負(fù)責(zé)執(zhí)行由master指派的任務(wù)。應(yīng)用程序至少應(yīng)該指明輸入/輸出的位置(路徑),并通過(guò)實(shí)現(xiàn)合適的接口或抽象類提供map和reduce函數(shù)。Hadoop有許多元素構(gòu)成,最底部是HadoopDistributedFileSystem,它存儲(chǔ)Hadoop集群中所有存儲(chǔ)節(jié)點(diǎn)上的文件。HDFS(對(duì)于本文)的上一層是MapReduce引擎,該引擎由JobTrackers和TaskTrackers組成。Hadoop集群的簡(jiǎn)化視圖如下圖3-3圖3-2Hadoop集群構(gòu)架圖1).HDFS對(duì)外部客戶機(jī)而言,HDFS就像一個(gè)傳統(tǒng)的分級(jí)文件系統(tǒng)。可以創(chuàng)建、刪除、移動(dòng)或重命名文件等等。但是HDFS的架構(gòu)是基于一組特定的節(jié)點(diǎn)構(gòu)建的,這是由它自身的特點(diǎn)決定的。這些節(jié)點(diǎn)包括NameNode(僅一個(gè)),它在HDFS內(nèi)部提供元數(shù)據(jù)服務(wù);DataNode,它為HDFS提供存儲(chǔ)塊。由于僅存在一個(gè)NameNode,因此這是HDFS的一個(gè)缺點(diǎn)(單點(diǎn)失?。?,還有復(fù)制到多個(gè)計(jì)算機(jī)中的DataNode。這與傳統(tǒng)的RAID架構(gòu)大不相同,塊的大?。ㄍǔ?4MB)和復(fù)制的塊數(shù)量在創(chuàng)建文件時(shí)由客戶機(jī)決定。NameNode可以控制所有文件操作,HDFS內(nèi)部的所有通信都基于標(biāo)準(zhǔn)的TCP/IP協(xié)議。2).NameNodeNameNode是一個(gè)通常在HDFS實(shí)例中單獨(dú)機(jī)器上運(yùn)行的軟件。它負(fù)責(zé)管理文件系統(tǒng)名稱空間和控制外部客戶機(jī)的訪問(wèn)。這個(gè)NameNode還會(huì)通知其他將要接收該塊的副本的DataNode。NameNode在一個(gè)稱為FsImage的文件中存儲(chǔ)所有關(guān)于文件系統(tǒng)名稱空間的信息。這個(gè)文件和一個(gè)包含所有事務(wù)的記錄文件(這里是EditLog)將存儲(chǔ)在NameNode的本地文件系統(tǒng)上。3).DataNodeDataNode也是一個(gè)通常在HDFS實(shí)例中的單獨(dú)機(jī)器上運(yùn)行的軟件。Hadoop集群包含一個(gè)NameNode和大量DataNode。DataNode通常以機(jī)架的形式組織,機(jī)架通過(guò)一個(gè)交換機(jī)將所有系統(tǒng)連接起來(lái)。Hadoop的一個(gè)假設(shè)是:機(jī)架內(nèi)部節(jié)點(diǎn)之間的傳輸速度快于機(jī)架間節(jié)點(diǎn)的傳輸速度。DataNode響應(yīng)來(lái)自HDFS客戶機(jī)的讀寫請(qǐng)求。3.3.1API中的包HadoopAPI被分成如下幾種主要的包(package)org.apache.hadoop.conf

定義了系統(tǒng)參數(shù)的配置文件處理API。org.apache.hadoop.fs

定義了抽象的文件系統(tǒng)API。org.apache.hadoop.dfs

Hadoop分布式文件系統(tǒng)(HDFS)模塊的實(shí)現(xiàn)。org.apache.hadoop.io

定義了通用的I/OAPI,用于針對(duì)網(wǎng)絡(luò),數(shù)據(jù)庫(kù),文件等數(shù)據(jù)對(duì)象做讀寫操作。org.apache.hadoop.ipc

用于網(wǎng)絡(luò)服務(wù)端和客戶端的工具,封裝了網(wǎng)絡(luò)異步I/O的基礎(chǔ)模塊。org.apache.hadoop.mapred

Hadoop分布式計(jì)算系統(tǒng)(MapReduce)模塊的實(shí)現(xiàn),包括任務(wù)的分發(fā)調(diào)度等。org.apache.hadoop.metrics

定義了用于性能統(tǒng)計(jì)信息的API,主要用于mapred和dfs模塊。org.apache.hadoop.record定義了針對(duì)記錄的I/OAPI類以及一個(gè)記錄描述語(yǔ)言翻譯器,用于簡(jiǎn)化將記錄序列化成語(yǔ)言中性的格式(language-neutralmanner)。org.apache.hadoop.tools

定義了一些通用的工具。org.apache.hadoop.util

定義了一些公用的API。4基于Hadoop分布式運(yùn)行程序4.1.1平臺(tái)搭建前準(zhǔn)備工作本平臺(tái)搭建需要用到vmworkstation虛擬機(jī)、centos操作系統(tǒng)、java開發(fā)環(huán)境、hadoop平臺(tái)。4.1.2CentOS安裝配置1)安裝配置在虛擬機(jī)中安裝CentOS。直接單擊“Skip”按鈕跳過(guò),否則單擊“OK”按鈕檢測(cè)安裝盤的完整性。當(dāng)檢測(cè)完電腦硬件信息后,進(jìn)入安裝歡迎界面。單擊“Next”按鈕進(jìn)入界面,選擇安裝過(guò)程中使用的語(yǔ)言,此處選擇“Chinese(Simplified)(中文(簡(jiǎn)體))”。選擇完安裝過(guò)程中的語(yǔ)言后,單擊“下一步”按鈕進(jìn)入選擇鍵盤類型一般默認(rèn)會(huì)選擇“美國(guó)英語(yǔ)式(U.S.English)”,即美式鍵盤,在此使用默認(rèn)的選擇。選擇一種存儲(chǔ)設(shè)備進(jìn)行安裝?!盎敬鎯?chǔ)設(shè)備”作為安裝空間的默認(rèn)選擇,適合哪些不知道應(yīng)該選擇哪個(gè)存儲(chǔ)設(shè)備的用戶。而“指定的存儲(chǔ)設(shè)備”則需要用戶將系統(tǒng)安裝指定到特定的存儲(chǔ)設(shè)備上,可以是本地某個(gè)設(shè)備,當(dāng)然也可以是SAN(存儲(chǔ)局域網(wǎng))。用戶一旦選擇了這個(gè)選項(xiàng),可以添加FCoE/iSCSI/zFCP磁盤,并且能夠過(guò)濾掉安裝程序應(yīng)該忽略的設(shè)備。這里選擇“基本存儲(chǔ)設(shè)備”,單擊“下一步”按鈕。安裝程序會(huì)提示您提供和域名為這臺(tái)計(jì)算機(jī)的主機(jī)名格式,設(shè)置主機(jī)名和域名。你可以選擇北京,或直接用鼠標(biāo)在地圖上選擇。要特別注意UTC,它與“夏令時(shí)”有關(guān),我們不需要選擇這個(gè)選項(xiàng),否則會(huì)造成時(shí)區(qū)混亂,導(dǎo)致系統(tǒng)顯示的時(shí)間與本地時(shí)間不同。下面是最重要的“系統(tǒng)管理員的口令”設(shè)置,在Linux中,系統(tǒng)管理員的默認(rèn)名稱為root,,這個(gè)口令很重要。至少6個(gè)字符以上,最好含有特殊符號(hào)。為方便分區(qū)硬盤,CentOS預(yù)設(shè)給了我們分區(qū)模式,分別為:選擇安裝的軟件包:可選的服務(wù)器類型更多,而且默認(rèn)安裝是一個(gè)非常小的甚至不完整的系統(tǒng)。選中“現(xiàn)在自定義”,然后單擊“下一步”按鈕。首先,選中「基本系統(tǒng)」中的「基本」和「Java平臺(tái)」。然后,選中「開發(fā)」中的「開發(fā)工具」。接著,在「語(yǔ)言支持」中選中「中文支持」。如果您有支持其他語(yǔ)言的需要,也可以在這里一并選擇。最后為了方便后來(lái)的系統(tǒng)操作,務(wù)必要把桌面全部點(diǎn)上,最后點(diǎn)擊“下一步”,開始安裝。開始安裝。在安裝的畫面中,會(huì)顯示還需要多少時(shí)間,每個(gè)軟件包的名稱,以及該軟件包的簡(jiǎn)單說(shuō)明。等到安裝完之后,一切就都完成了。

2)環(huán)境設(shè)置root用戶擁有控制整個(gè)系統(tǒng)的最高權(quán)限,如果在一般的操作中我們用root來(lái)進(jìn)行,很容易不小心對(duì)系統(tǒng)造成誤刪、誤更改等操作,所以我們首先建立一般用戶,用一般用戶來(lái)應(yīng)付日常的系統(tǒng)操作。關(guān)閉SELinux用下面命令執(zhí)行,并修改內(nèi)容如下所示:vim/etc/sysconfig/selinuxSELINUX=enforcingSELINUX=disabled接著在執(zhí)行如下命令:setenforce0getenforce使用下面命令進(jìn)行關(guān)閉不需要的服務(wù):forSERVICESinabrtdacpidauditdavahi-daemoncpuspeedhaldaemonmdmonitormessagebusudev-post;dochkconfig${SERVICES}off;done4.1.3Hadoop運(yùn)行環(huán)境搭建1)節(jié)點(diǎn)部署Master,2個(gè)Slave,節(jié)點(diǎn)地址如下:01hd00102hd00203hd003其中hd001是Master,hd002和hd003是Slave修改主機(jī)名字首先通過(guò)命令hostname產(chǎn)看主機(jī)名字,然后進(jìn)入/etc/sysconfig/network修改其中的”HOSTNMAE”值,如HOSTNAME=hd001修改當(dāng)前主機(jī)IP地址:ifconfigeth001?;蛘哌M(jìn)入/etc/sysconfig/network-scripts文件夾下ifcfg-eth0里面的IPADDR=01或者通過(guò)vim/etc/sysconfig/network-scripts/ifcfg-eth0進(jìn)行編輯。配置hosts文件:進(jìn)入/etc/hosts寫入localhost01hd00102hd00203hd0032)JDK軟件安裝本文使用的是Linuxx86:jdk-7u45-linux-i586.tat.gz把文件復(fù)制到/usr/java文件夾下:mkdir/usr/java//新建java文件夾cpjdk位置/usr/java/然后進(jìn)入/usr/java/下:tar–zxvfjdk-7u45-linux-i586.tat.gz進(jìn)入/etc/profile中配置環(huán)境變量,再最后加入:JAVA_HOME=/usr/java/jdk1.7.0_45ClASSPATH=.:$JAVA_HOME/lib/tools.jarPATH=$JAVA_HOME/bin:$PATHExportJAVA_HOMECLASSPATHPATH運(yùn)行source/etc/profile使之生效Java–version測(cè)試是否配置成功。4.1.4SSH無(wú)密碼驗(yàn)證配置1.安裝ssh并啟動(dòng)rpm–qa|grepopensshrpm–qa|greprsyncservicesshdrestart/啟動(dòng)服務(wù)2.配置Master無(wú)密碼登錄所有的Slave:在master上的配置如下:1.生成公私鑰ssh-keygen–trsa–P’’2.將公鑰寫到配置文件authorized_keyscat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys3.修改文件權(quán)限chmod600~/.ssh/authorized_keys4.進(jìn)入/etc/ssh/ssh-config文件:RSAAuthenticationyesPubkeyAuthenticationyesAuthorizedKeysFile.ssh/authorized_keys重啟ssh:servicesshdrestart5.把master公鑰傳到hd002scp~/.ssh/id_rsa.pubroot@02:~/yes123456(密碼)進(jìn)入hd002中查看llmkdir~/.sshchmod700~/.sshcat~/id_rsa.pub>>~/.ssh/authorized_keyschmod600~/.ssh/authorized_keys同時(shí)修改hd002的ssh_config文件并重啟ssh服務(wù)。在Master測(cè)試hd002:ssh02(不需要輸入密碼)在hd002上刪除id_rsa.pubrm–r~/.id_rsa.pub至此實(shí)現(xiàn)了由master向hd002的無(wú)密碼登錄,hd003同樣配置。6.配置所有的Slave無(wú)密碼登錄Master在hd002上面:ssh-kekygen–trsa–P‘’cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys傳給Master:scp~/.ssh/id_rsa.pubroot@01:~/在Master上面:cat~/id_rsa.pub>>~/.ssh/authorized_keysrm~/id_rsa.pub在hd002測(cè)試Master:ssh01(無(wú)需密碼)同理hd0034.1.5Hadoop集群安裝1.新建hadoop用戶:useradd–mhadooppasswordhadoop123456(密碼)hd002和hd003都需要建立,并且密碼一樣。2.下載hadoop-1.2.1.tar.gz復(fù)制到/usr/下面在Master下面:cd/usrtar–zxvfhadoop-1.2.1.tar.gzmvhadoop-1.2.1hadoop//重命名chown–Rhadoop:hadoophadoop將hadoop文件夾的讀權(quán)限給hadooprm–rfhadoop-1.2.1.tar.gz然后進(jìn)入/etc/profile,在最后加入#sethadooppathexportHADOOP_HOME=/usr/hadoop(根據(jù)目錄來(lái)定)exportPATH=$PATH:$HADOOP_HOME/binexportHADOOP_HOME_WARN_SUPPRESS=1運(yùn)行source/etc/profile同時(shí)mkdir/usr/hadoop/tmp新建tmp2.配置hadoop:usr/hadoop/config1.hadoop-env.sh:exportJAVA_HOME=/usr/java/jdk1.7.0_452.core-site.xml<configuration><property><name>hadoop.tmp.dir</name><value>/usr/hadoop/tmp</value></property><property><name></name><value>hdfs://01:9000</value></property></configuration>3.hdfs-site.xml文件<configuration><property><name>dfs.replication</name><value>1</value></property></configuration>4.mapred-site.xml<configuration><property><name>mapred.job.tracker</name><value>01:9001</value></property></configuration>5.master文件:01或者h(yuǎn)d0016.Slave文件(僅在Master主機(jī)持有)0203或者h(yuǎn)d002hd003同樣的配置hd002和hd003,第六步除外。4.啟動(dòng):格式化HDFS:hadoopnamenode–format(僅在master執(zhí)行)啟動(dòng)hadoop:serviceiptablesstop(hd001hd002hd003都執(zhí)行)start-all.sh(僅master)啟動(dòng)之后查看效果:master:ll/usr/hadoop/tmp總用量4slavell/usr/hadoop/tmp總用量8驗(yàn)證hadoop:方法一:jsp(Master)JobTrackerNameNodeJPSSecondaryNameNodejps(Slave)TaskTrackerDataNodeJPS至此hadoop集群已搭建完畢。測(cè)試?yán)覹ordCount以root進(jìn)入Master:命令如下llmkdir~/filellcdfileecho“HelloWorld”>file1.txtecho“HelloHadoop”>file2.txtllmorefile1.txtmorefile2.txt在HDFS上創(chuàng)建輸入文件夾hadoopfs–mkdirinputhadoopfs–lshadoopfs–put~/file/file*.txtinputhadoopjar/usr/hadoop/hadoop-examples-1.2.1.jarwordcountinputoutput查看結(jié)果hadoopfs–lsoutputhadoopfs–catoutput/part-r-00000結(jié)果如下Hadoop1Hello2World14.2.1wordcount系統(tǒng)概述這個(gè)程序用于統(tǒng)計(jì)一批文本文件中單詞出現(xiàn)的頻率,是一個(gè)具體的計(jì)算任務(wù),是基于Hadoop編寫的第一個(gè)并行程序。其主要思想是是將一句話分詞,先用map處理再用reduce處理,最后再main函數(shù)中設(shè)置一些信息,然后run(),程序就結(jié)束了。4.2.2實(shí)現(xiàn)Map類這個(gè)類實(shí)現(xiàn)Mapper接口中的map方法,輸入?yún)?shù)中的value是文本文件中的一行,利用StringTokenizer將這個(gè)字符串拆成單詞,然后將輸出結(jié)果<單詞,1>寫入到org.apache.hadoop.mapred.OutputCollector中。OutputCollector由Hadoop框架提供,負(fù)責(zé)收集Mapper和Reducer的輸出數(shù)據(jù),實(shí)現(xiàn)map函數(shù)和reduce函數(shù)時(shí),只需要簡(jiǎn)單地將其輸出的<key,value>對(duì)往OutputCollector中一丟即可,剩余的事框架自會(huì)幫你處理好。代碼中LongWritable,IntWritable,Text均是Hadoop中實(shí)現(xiàn)的用于封裝Java數(shù)據(jù)類型的類,這些類都能夠被串行化從而便于在分布式環(huán)境中進(jìn)行數(shù)據(jù)交換,你可以將它們分別視為long,int,String的替代品。Reporter則可用于報(bào)告整個(gè)應(yīng)用的運(yùn)行進(jìn)度,本例中未使用。代碼如下publicstaticclassTokenizerMapperextends Mapper<Object,Text,Text,IntWritable>{ privatefinalstaticIntWritableone=newIntWritable(1); privateTextword=newText(); privateStringpattern="[^\\w]"; publicvoidmap(Objectkey,Textvalue,Contextcontext) throwsIOException,InterruptedException{ Stringline=value.toString().toLowerCase(); line=line.replaceAll(pattern,""); StringTokenizeritr=newStringTokenizer(line); while(itr.hasMoreTokens()){ word.set(itr.nextToken()); context.write(word,one); } } }4.2.3實(shí)現(xiàn)Reduce類這個(gè)類實(shí)現(xiàn)Reducer接口中的reduce方法,輸入?yún)?shù)中的key,values是由Map任務(wù)輸出的中間結(jié)果,values是一個(gè)Iterator,遍歷這個(gè)Iterator,就可以得到屬于同一個(gè)key的所有value.此處,key是一個(gè)單詞,value是詞頻。只需要將所有的value相加,就可以得到這個(gè)單詞的總的出現(xiàn)次數(shù)。代碼如下publicstaticclassIntSumReducerextends Reducer<Text,IntWritable,Text,IntWritable>{ privateIntWritableresult=newIntWritable(); publicvoidreduce(Textkey,Iterable<IntWritable>values, Contextcontext)throwsIOException,InterruptedException{ intsum=0; for(IntWritableval:values){ sum+=val.get(); } result.set(sum); context.write(key,result); } }4.2.4運(yùn)行Job在Hadoop中一次計(jì)算任務(wù)稱之為一個(gè)job,可以通過(guò)一個(gè)JobConf對(duì)象設(shè)置如何運(yùn)行這個(gè)job。此處定義了輸出的key的類型是Text,value的類型是IntWritable,指定使用代碼清單1中實(shí)現(xiàn)的MapClass作為Mapper類,使用代碼清單2中實(shí)現(xiàn)的Reduce作為Reducer類和Combiner類,任務(wù)的輸入路徑和輸出路徑由命令行參數(shù)指定,這樣job運(yùn)行時(shí)會(huì)處理輸入路徑下的所有文件,并將計(jì)算結(jié)果寫到輸出路徑下。然后將JobConf對(duì)象作為參數(shù),調(diào)用JobClient的runJob,開始執(zhí)行這個(gè)計(jì)算任務(wù)。至于main方法中使用的ToolRunner是一個(gè)運(yùn)行MapReduce任務(wù)的輔助工具類,依樣畫葫蘆用之即可。代碼如下publicintrun(String[]args)throwsException{JobConfconf=newJobConf(getConf(),WordCount.class);conf.setJobName("wordcount");conf.setOutputKeyClass(Text.class);conf.setOutputValueClass(IntWritable.class);conf.setMapperClass(MapClass.class);conf.setCombinerClass(Reduce.class);conf.setReducerClass(Reduce.class);conf.setInputPath(newPath(args[0]));conf.setOutputPath(newPath(args[1]));JobClient.runJob(conf);return0;}publicstaticvoidmain(String[]args)throwsException{if(args.length!=2){System.err.println("Usage:WordCount<inputpath><outputpath>");System.exit(-1);}intres=ToolRunner.run(newConfiguration(),newWordCount(),args);System.exit(res);}}4.2.5設(shè)計(jì)與編碼1)創(chuàng)建Java工程打開eclipse,選擇“File->New->JavaProject”,新建一個(gè)“JavaProject”,進(jìn)入“NewJavaProject”對(duì)話框,將“Projectname”設(shè)置為“wordcount”,選中“wordcount”,并單擊右鍵,選擇“New->Class”菜單,新建“Name”為“WordCount”的class,并選中自動(dòng)創(chuàng)建main函數(shù),2)配置編譯參數(shù)下面開始配置“BuildPath”,選中“wordcount”,單擊右鍵,點(diǎn)擊菜單“BuildPath->ConfigureBuildPath”,進(jìn)入“JavaBuildPath”配置界面。選擇“Libraries”標(biāo)簽頁(yè),點(diǎn)擊右側(cè)的“AddExternalJAR”按鈕,將安裝好的“hadoop-0.20.0-core.jar”“commons-logging-1.0.4.jar”“commons-cli-1.2.jar”添加進(jìn)來(lái)。3)編寫源代碼進(jìn)入的“wordcount.java”文件編輯界面,將“wordcount.java”的內(nèi)容修改成附錄中A中的代碼。4)編譯生成JAR右鍵“wordcount”項(xiàng)目,選擇“BuildProject”,編譯項(xiàng)目工程,編譯“wordcount.java”后,生成wordcount.class文件右鍵項(xiàng)目,選擇“Export”:進(jìn)入“Export”對(duì)話框:選中“JARfile”,然后點(diǎn)擊“Next”按鈕,設(shè)置好JAR包的文件名和存放位置,然后點(diǎn)擊“Finish”按鈕,生成wordcount.jar文件然后將wordcount.jar文件上傳到HadoopMaster節(jié)點(diǎn)。5測(cè)試運(yùn)行1)配置SSH,如代碼如下所示:$ssh-keygen-tdsa-P''-f~/.ssh/id_dsa$cat~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys2)格式化一個(gè)新的分布式文件系統(tǒng),如代碼如下所示:$cdusr/hadoop$bin/hadoopnamenode–format啟動(dòng)hadoop進(jìn)程,如代碼如下所示??刂婆_(tái)上的輸出信息應(yīng)該顯示啟動(dòng)了namenode,datanode,secondarynamenode,jobtracker,tasktracker。啟動(dòng)完成之后,$bin/start-all.sh$ps–ef4)運(yùn)行wordcount應(yīng)用,如代碼如下所示:$bin/hadoopdfs-put/usr/wordcount/inputinput#執(zhí)行bin/hadoopdfs–help可以學(xué)習(xí)各種HDFS命令的使用。$bin/hadoopjar/usr/wordcount/wordcount.jarWordCountinputoutput#查看執(zhí)行結(jié)果:#將文件從HDFS拷到本地文件系統(tǒng)中再查看:$bin/hadoopdfs-getoutputoutput$catoutput/*#也可以直接查看$bin/hadoopdfs-catoutput/*$bin/stop-all.sh#停止hadoop進(jìn)程5)故障診斷1、通過(guò)這五個(gè)文件,可以得知namenode,datanode,secondarynamenode,jobtracker,tasktracker分別對(duì)應(yīng)于哪一個(gè)Java進(jìn)程。2、使用web接口。訪問(wèn)http://localhost:50030可以查看JobTracker的運(yùn)行狀態(tài)。訪問(wèn)http://localhost:50060可以查看TaskTracker的運(yùn)行狀態(tài)。訪問(wèn)http://localhost:50070可以查看NameNode以及整個(gè)分布式文件系統(tǒng)的狀態(tài),瀏覽分布式文件系統(tǒng)中的文件以及l(fā)og等。3、查看${HADOOP_HOME}/logs目錄下的log文件,namenode,datanode,secondarynamenode,jobtracker,tasktracker各有一個(gè)對(duì)應(yīng)的log文件,每一次運(yùn)行的計(jì)算任務(wù)也有對(duì)應(yīng)用log文件。分析這些log文件有助于找到故障原因。(1)圖5-1和圖5-2為Map/Reduce處理過(guò)程,由圖示可以看出,任務(wù)總共分成了18個(gè)作業(yè)并行處理。提交數(shù)據(jù)2098143232Bytes。CPU耗時(shí)39930ms圖5-1Map/Reduce處理過(guò)程圖5-2Map/Reduce處理過(guò)程(2)圖5-3為,處理結(jié)果的日志,用cat命令將詞頻統(tǒng)計(jì)的具體文件內(nèi)容輸出到屏幕。hadoopfs-catoutput/part-r-00000圖5-3查看處理結(jié)果(3)圖5-4為詞頻統(tǒng)計(jì)結(jié)果,出現(xiàn)過(guò)的各種詞語(yǔ)以及出現(xiàn)次數(shù)圖5-4詞頻統(tǒng)計(jì)結(jié)果5.3結(jié)論經(jīng)過(guò)一步一步的安裝和搭建,最總實(shí)現(xiàn)了hadoop的分布式運(yùn)算,hadoop是云計(jì)算的核心架構(gòu),這個(gè)框架可以運(yùn)行在任何的計(jì)算機(jī)上,這樣運(yùn)算海量的數(shù)據(jù)時(shí),hadoop就能把數(shù)據(jù)分成千萬(wàn)分小的數(shù)據(jù),分別分配給每一個(gè)計(jì)算機(jī),然后調(diào)用map去運(yùn)算這些數(shù)據(jù),如果有壞死的節(jié)點(diǎn),這個(gè)平臺(tái)直接能標(biāo)記并保存,對(duì)全局是沒(méi)有任何影響的,這就是云計(jì)算最關(guān)鍵的技術(shù),這就是與并行計(jì)算的不同之處,云計(jì)算比較靈活,當(dāng)所有數(shù)據(jù)處理完的時(shí)候,hadoop平臺(tái)調(diào)用reduce方法,把運(yùn)行的結(jié)果收集回來(lái),然后經(jīng)過(guò)主節(jié)點(diǎn)的統(tǒng)計(jì),最后得出最終的結(jié)果,從時(shí)間和空間上都提高了效率,所以這使得云計(jì)算得意快速發(fā)展,但是如果處理小數(shù)據(jù),云計(jì)算是沒(méi)有一點(diǎn)優(yōu)勢(shì)的,云計(jì)算主要針對(duì)的是大數(shù)據(jù),相信云計(jì)算以后再生活和工作中會(huì)發(fā)揮越來(lái)越大的作用。

致謝首先要感謝我的指導(dǎo)老師李福亮老師。李老師淵博的學(xué)識(shí)敏銳的學(xué)術(shù)洞察力、忘我的工作精神、嚴(yán)謹(jǐn)?shù)目蒲袘B(tài)度和與時(shí)俱進(jìn)的創(chuàng)新思想令人敬佩不己,也使我受益匪淺。李老師不僅在學(xué)習(xí)上,我的讀本和職業(yè)生涯給出了建議,而且在生活上的關(guān)心更是讓我體會(huì)到了身在這個(gè)集體的溫暖。在這里,我向李老師表達(dá)衷心的感謝和崇高的敬意,真心謝謝李老師多年栽培。感謝各為其他同學(xué)。他們對(duì)我的學(xué)習(xí)進(jìn)步、以及我完成論文起到了不可忽視的作用。同時(shí)我從他們身上也學(xué)習(xí)到很多生活的智慧和做人的道理。最后感謝我學(xué)校的領(lǐng)導(dǎo)、老師和同學(xué),在我的成長(zhǎng)歷程中謝謝您們?cè)?jīng)對(duì)我的關(guān)心和幫助。參考文獻(xiàn)[1]王鵬編著《走進(jìn)云計(jì)算》[M].人民郵電出版社,2009,111-120[2]王慶波《虛擬化與云計(jì)算》[M].電子工業(yè)出版,2009,45-48[3]云計(jì)算小組《云計(jì)算寶典》[M].電子工業(yè)出版社,2011-9-1,101-124[5]吳朱華《云計(jì)算核心技術(shù)剖析》[M].人民郵電出版社,2011-5-1,124-155[6]胡小菁,范并思.云計(jì)算給圖書館管理帶來(lái)挑戰(zhàn)[J].大學(xué)圖書館學(xué)報(bào),2009(4),7-12[7]王長(zhǎng)全,艾雰.云計(jì)算時(shí)代的數(shù)字圖書館信息安全思考.圖書館建設(shè),2010(1),50-52[8]范并思.云計(jì)算與圖書館:為云計(jì)算研究辯護(hù)[J].圖書情報(bào)工作,2009(21),5-9[9]鄧倩妮,云計(jì)算及其關(guān)鍵技術(shù)[J].《高性能計(jì)算發(fā)展與應(yīng)用》2009(1),1-3[10]王長(zhǎng)全,云計(jì)算時(shí)代的數(shù)字圖書館信息安全思考[J].圖書館建設(shè),2010(1),50-52[11]Dean,Jeffrey&Ghemawat,Sanjay《MapReduce:SimplifiedDataProcessingonLargeClusters》[M].2005-4-6,105-113[12]J.Dean,S.Ghemawat.MapReduce:SimplifiedDataProcessingonLargeClusterOSDI`04,SixthSymposiumonOperatingSystemDesignandImplementation,SanFrancisco,CA,December,2004[13]鄧自立.云計(jì)算中的網(wǎng)絡(luò)拓?fù)湓O(shè)計(jì)和Hadoop平臺(tái)研究[J].中國(guó)知網(wǎng),2009[14]王鵬《云計(jì)算的關(guān)鍵技術(shù)與應(yīng)用實(shí)例》[M].人民郵電出版社,2010,29-37[15]薛毅飛.云計(jì)算在數(shù)字圖書館中的應(yīng)用[J].圖書與檔案,2009(29),372-373附錄A詞頻統(tǒng)計(jì)程序代碼packageword;importjava.io.IOException;importjava.util.Random;importjava.util.StringTokenizer;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.io.WritableComparable;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.Reducer;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;importorg.apache.hadoop.mapreduce.lib.map.InverseMapper;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;importorg.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;importorg.apache.hadoop.util.GenericOptionsParser;publicclassWordCount{ publicstaticclassTokenizerMapperextends Mapper<Object,Text,Text,IntWritable>{ privatefinalstaticIntWritableone=newIntWritable(1); privateTextword=newText(); privateStringpattern="[^\\w]";//正則表達(dá)式,代表不是0-9,a-z,A-Z的所有其它字符,其中還有下劃線 publicvoidmap(Objectkey,Textvalue,Contextcontext) throwsIOException,InterruptedException{ Stringline=value.toString().toLowerCase();//全部轉(zhuǎn)為小寫字母 line=line.replaceAll(pattern,"");//將非0-9,a-z,A-Z的字符替換為空格 StringTokenizeritr=newStringTokenizer(line); while(itr.hasMoreTokens()){ word.set(itr.nextToken()); context.write(word,one); } } } publicstaticclassIntSumReducerextends Reducer<Text,IntWritable,Text,IntWritable>{ privateIntWritableresult=newIntWritable(); publicvoidreduce(Textkey,Iterable<IntWritable>values, Contextcontext)throwsIOException,InterruptedException{ intsum=0; for(IntWritableval:values){ sum+=val.get(); } result.set(sum); context.write(key,result

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論