日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

云计算平台构建与实验设计

發(fā)布時(shí)間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 云计算平台构建与实验设计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

課程設(shè)計(jì)任務(wù)書


一、作業(yè)目的

? ? 物聯(lián)網(wǎng)的核心是應(yīng)用,應(yīng)用的核心是云計(jì)算。通過構(gòu)建一個(gè)云計(jì)算平臺(tái),并利用這個(gè)平臺(tái)設(shè)計(jì)云計(jì)算實(shí)驗(yàn),將結(jié)果與普通的電腦計(jì)算比較兩者的差別,感受云計(jì)算的優(yōu)越性能,從而對(duì)物聯(lián)網(wǎng)有更深刻的體驗(yàn)與認(rèn)識(shí)。

二、作業(yè)內(nèi)容及要求

????能夠按照課程設(shè)計(jì)任務(wù)書按照相應(yīng)的要求完成整個(gè)云計(jì)算平臺(tái)的搭建,要完成這個(gè)任務(wù),就要對(duì)云計(jì)算平臺(tái)的架構(gòu)和原理有一定的認(rèn)識(shí),對(duì)物聯(lián)網(wǎng)的應(yīng)用層有深入的學(xué)習(xí),通過查閱書籍文獻(xiàn)與網(wǎng)絡(luò)資料去掌握相關(guān)知識(shí),完成云平臺(tái)的構(gòu)建與實(shí)驗(yàn)的設(shè)計(jì)。

三、作業(yè)成果形式及提交要求

做出實(shí)驗(yàn)成果,并向驗(yàn)收老師展示其功能和實(shí)現(xiàn)原理,回答老師提出的相關(guān)問題;提交實(shí)驗(yàn)程序和報(bào)告。提交要求是實(shí)物驗(yàn)收必須得到老師的肯定,報(bào)告必須能清晰說(shuō)明實(shí)驗(yàn)過程與原理,嚴(yán)謹(jǐn)有說(shuō)服力。

四、參考文獻(xiàn)

[1] Hadoop權(quán)威指南,清華大學(xué)出版社,2010-5-1

[2] NIST Cloud Computing Program,http://www.nist.gov/itl/cloud/

[3] Hadoop大數(shù)據(jù)處理,人民郵電出版社,2013-09-01

[4] 虛擬化與云計(jì)算,電子工業(yè)出版社,2009-10-1

[5] 走近云計(jì)算,人民郵電出版社,2009年

[6] Hadoop實(shí)戰(zhàn),人民郵電出版社,2011年10月

[7] Hadoop云計(jì)算實(shí)戰(zhàn),清華大學(xué)出版社,2012-10

目錄

課程設(shè)計(jì)任務(wù)書

目錄

摘要

1 緒論

??1.1 云計(jì)算概述

????1.1.1 云計(jì)算的五大核心特點(diǎn)

????1.1.2 云計(jì)算的三種服務(wù)模式

??1.2 Hadoop系統(tǒng)概述

??1.3 云計(jì)算平臺(tái)搭建方法

??1.4 本次課設(shè)所用平臺(tái)與搭建方法

2.云計(jì)算平臺(tái)原理

??2.1 Hadoop系統(tǒng)原理

??2.2 ubuntu系統(tǒng)

3.云計(jì)算平臺(tái)搭建過程?

??3.1 ubuntu系統(tǒng)的安裝?

??3.2 Hadoop系統(tǒng)部署?

4.分布式云計(jì)算實(shí)驗(yàn)?

??4.1基于MapReduce的分布式云計(jì)算實(shí)驗(yàn)?

??4.2 普通PC機(jī)上的對(duì)比實(shí)驗(yàn)?

??4.3分布式云計(jì)算實(shí)驗(yàn)結(jié)果與總結(jié)?

5.課程設(shè)計(jì)總結(jié)

6.附錄

摘要

物聯(lián)網(wǎng)的核心是應(yīng)用,應(yīng)用的核心是云計(jì)算。從一開始學(xué)習(xí)物聯(lián)網(wǎng)這門課開始就不斷的聽到云計(jì)算的介紹,并且隨著學(xué)習(xí)的深入,越來(lái)越感受到云計(jì)算在物聯(lián)網(wǎng)中的重要作用,沒錯(cuò),物聯(lián)網(wǎng)的核心是應(yīng)用,應(yīng)用的核心是云計(jì)算。世界已經(jīng)悄然進(jìn)入到大數(shù)據(jù)時(shí)代,大數(shù)據(jù)的處理依靠傳統(tǒng)手段已經(jīng)捉襟見肘,隨著云計(jì)算的出現(xiàn),大數(shù)據(jù)的潛力才充分發(fā)掘出來(lái),物聯(lián)網(wǎng)也正是接著云計(jì)算的東風(fēng)才能夠發(fā)展到今天這種深刻改變?nèi)藗兩罘绞降牡夭健?/p>

云計(jì)算是物聯(lián)網(wǎng)的應(yīng)用層,做云計(jì)算關(guān)鍵要學(xué)會(huì)怎么去運(yùn)用物聯(lián)網(wǎng),為此需要查閱與云計(jì)算有關(guān)的書籍,網(wǎng)上牛人的筆記和國(guó)外網(wǎng)站的資料,親手設(shè)計(jì)與實(shí)現(xiàn)分布式程序進(jìn)行實(shí)驗(yàn),從而直觀的感受到云計(jì)算的強(qiáng)大與物聯(lián)網(wǎng)的無(wú)處不在。

云計(jì)算的重要性不言而喻,物聯(lián)網(wǎng)的發(fā)展離不開云計(jì)算,所以研究云計(jì)算的搭建與運(yùn)用是具有極大的意義。


關(guān)鍵詞:物聯(lián)網(wǎng) ?云計(jì)算 云計(jì)算平臺(tái)搭建 分布式計(jì)算

1,緒論

1.1?云計(jì)算概述

在參考文獻(xiàn)2里,NIST對(duì)云計(jì)算定義如下:云計(jì)算是一種能夠通過網(wǎng)絡(luò)以便利的、按需付費(fèi)的方式獲取計(jì)算資源(包括網(wǎng)絡(luò)、服務(wù)器、存儲(chǔ)、應(yīng)用和服務(wù)等)并提高其可用性的模式,這些資源來(lái)自一個(gè)共享的、可配置的資源池,并能夠以最省力和無(wú)人干預(yù)的方式獲取和釋放。這種模式具有5個(gè)關(guān)鍵功能,還包括3種服務(wù)模式和4種部署方式。

1.1.1云計(jì)算的五大核心特點(diǎn):

按需自助服務(wù)(On Demand Self-Service):供應(yīng)商的資源保持高可用和高就緒的狀態(tài),用戶可以按需方便地自助地獲得資源。

泛在的網(wǎng)絡(luò)訪問(Broad Network Access):可以通過各種網(wǎng)絡(luò)渠道,以統(tǒng)一標(biāo)準(zhǔn)的機(jī)制(如瀏覽器,相同的API等)獲取服務(wù),但是客戶端可以是多種多樣的瘦客戶端或富客戶端(例如移動(dòng)電話、筆記本電腦、PDA等)。

動(dòng)態(tài)的資源池(Resource Pooling):供應(yīng)商的計(jì)算資源可以被整合為一個(gè)動(dòng)態(tài)資源池,以多租戶模式服務(wù)所有客戶,不同的物理和虛擬資源可根據(jù)客戶需求動(dòng)態(tài)分配。服務(wù)商需實(shí)現(xiàn)資源的位置無(wú)關(guān)性,客戶一般不需要知道所使用的資源的確切地理位置,但在需要的時(shí)候客戶可以指定資源位置(如哪個(gè)國(guó)家,哪個(gè)數(shù)據(jù)中心等)的要求。

快速?gòu)椥?#xff08;Rapid Elasticity):可以迅速、彈性地提供服務(wù),能快速擴(kuò)展,也可以快速釋放實(shí)現(xiàn)快速縮小。對(duì)客戶來(lái)說(shuō),可以租用的資源看起來(lái)似乎是無(wú)限的,可在任何時(shí)間購(gòu)買任何數(shù)量的資源。

可計(jì)量的服務(wù)(Measured Service):服務(wù)的收費(fèi)可以是基于計(jì)量的一次一付,或基于廣告的收費(fèi)模式。系統(tǒng)以針對(duì)不同服務(wù)需求(例如,CPU時(shí)間、存儲(chǔ)空間、帶寬、甚至按用戶賬號(hào)的使用率高低)來(lái)計(jì)量資源的使用情況和定價(jià),以提高資源的管控能力和促進(jìn)優(yōu)化利用。整個(gè)系統(tǒng)資源可以通過監(jiān)控和報(bào)表的方式對(duì)服務(wù)提供者和使用者透明化。

1.1.2云計(jì)算的三種服務(wù)模式

云計(jì)算的三個(gè)服務(wù)模式(Delivery Models)是:SaaS、PaaS和IaaS。

SaaS:提供給客戶的服務(wù)是運(yùn)營(yíng)商運(yùn)行在云計(jì)算基礎(chǔ)設(shè)施上的應(yīng)用程序,用戶可以在各種設(shè)備上通過瘦客戶端界面訪問,如瀏覽器。消費(fèi)者不需要管理或控制任何云計(jì)算基礎(chǔ)設(shè)施,包括網(wǎng)絡(luò)、服務(wù)器、操作系統(tǒng)、存儲(chǔ),等等。

PaaS:提供給消費(fèi)者的服務(wù)是把客戶采用提供的開發(fā)語(yǔ)言和工具(例如Java、Python、.Net等)開發(fā)的或收購(gòu)的應(yīng)用程序部署到供應(yīng)商的云計(jì)算基礎(chǔ)設(shè)施上。客戶不需要管理或控制底層的云基礎(chǔ)設(shè)施,包括網(wǎng)絡(luò)、服務(wù)器、操作系統(tǒng)、存儲(chǔ)等,但客戶能控制部署的應(yīng)用程序,也可能控制運(yùn)行應(yīng)用程序的托管環(huán)境配置。

IaaS: 提供給消費(fèi)者的服務(wù)是對(duì)所有設(shè)施的利用,包括處理、存儲(chǔ)、網(wǎng)絡(luò)和其他基本的計(jì)算資源,用戶能夠部署和運(yùn)行任意軟件,包括操作系統(tǒng)和應(yīng)用程序。消費(fèi)者不管理或控制任何云計(jì)算基礎(chǔ)設(shè)施,但能控制操作系統(tǒng)的選擇、儲(chǔ)存空間、部署的應(yīng)用,也有可能獲得有限制的網(wǎng)絡(luò)組件(例如,防火墻、負(fù)載均衡器等)的控制。

目前世界大多數(shù)互聯(lián)網(wǎng)公司都開始布局云計(jì)算,Google,華為,BAT,亞馬遜也都已經(jīng)將云計(jì)算成熟運(yùn)用與自己的生態(tài)系統(tǒng),并產(chǎn)生巨大的效益。國(guó)內(nèi)外關(guān)于云計(jì)算的研究都在火熱的進(jìn)行中。無(wú)論是收費(fèi)的云計(jì)算服務(wù)還是開源云計(jì)算研究都趨于白熱化,可見云計(jì)算在未來(lái)各個(gè)領(lǐng)域非同一般的潛力。

1.2 Hadoop系統(tǒng)概述

Hadoop是一個(gè)由Apache基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。 Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)(Hadoop Distributed File System),簡(jiǎn)稱HDFS。HDFS有高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來(lái)部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來(lái)訪問應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統(tǒng)中的數(shù)據(jù)。

Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和Map Reduce。HDFS為海量的數(shù)據(jù)提供了存儲(chǔ),則Map Reduce為海量的數(shù)據(jù)提供了計(jì)算。

?

圖1-1?HDFS文件系統(tǒng)結(jié)構(gòu)

?

圖1-2?Map Reduce工作流程

Hadoop技術(shù)已經(jīng)無(wú)處不在。不管是好是壞,Hadoop已經(jīng)成為大數(shù)據(jù)的代名詞。短短幾年間,Hadoop從一種邊緣技術(shù)成為事實(shí)上的標(biāo)準(zhǔn),不僅現(xiàn)在Hadoop是企業(yè)大數(shù)據(jù)的標(biāo)準(zhǔn),而且在未來(lái),它的地位似乎一時(shí)難以動(dòng)搖。

1.3 云計(jì)算平臺(tái)搭建方法

目前開源的云計(jì)算平臺(tái)的搭建都要依托Linux系統(tǒng),因此我們有2種辦法搭建云計(jì)算平臺(tái):安裝Linux系統(tǒng)和在其他操作系統(tǒng)下安裝Linux虛擬機(jī)后搭建云平臺(tái)。目前主流的虛擬機(jī)有:

Virtual Box

Vmware

有了Linux系統(tǒng)環(huán)境后就能搭建云計(jì)算平臺(tái)了,幾大開源云平臺(tái)系統(tǒng)有:

Hadoop系統(tǒng)

Open Stack

云計(jì)算平臺(tái)的搭建=Linux系統(tǒng)+開源云平臺(tái)+SSH框架。

1.4 本次課設(shè)所用平臺(tái)與搭建方法

一開始本設(shè)計(jì)采用的是虛擬機(jī)+Hadoop系統(tǒng)+SSH框架搭建自己的云計(jì)算平臺(tái),發(fā)現(xiàn)在虛擬機(jī)下的Linux系統(tǒng)無(wú)法下載一些系統(tǒng)關(guān)鍵應(yīng)用導(dǎo)致云平臺(tái)無(wú)法搭建,前后實(shí)驗(yàn)多次后直接給在純Linux系統(tǒng)部署云計(jì)算平臺(tái)從而成功搭建好云平臺(tái),本次課程設(shè)計(jì)所采用的搭建辦法是:

Ubuntu14.04系統(tǒng)+Hadoop系統(tǒng)+SSH框架。

2,云計(jì)算平臺(tái)原理

2.1?Hadoop系統(tǒng)原理

Hadoop是一個(gè)開源的可運(yùn)行于大規(guī)模集群上的分布式并行編程框架,其最核心的設(shè)計(jì)包括:Map Reduce和HDFS。基于 Hadoop,你可以輕松地編寫可處理海量數(shù)據(jù)的分布式并行程序,并將其運(yùn)行于由成百上千個(gè)結(jié)點(diǎn)組成的大規(guī)模計(jì)算機(jī)集群上。

簡(jiǎn)單的說(shuō):Map Reduce框架的核心步驟主要分兩部分:Map和Reduce。當(dāng)你向Map Reduce框架提交一個(gè)計(jì)算作業(yè)時(shí),它會(huì)首先把計(jì)算作業(yè)拆分成若干個(gè)Map任務(wù),然后分配到不同的節(jié)點(diǎn)上去執(zhí)行,每一個(gè)Map任務(wù)處理輸入數(shù)據(jù)中的一部分,當(dāng)Map任務(wù)完成后,它會(huì)生成一些中間文件,這些中間文件將會(huì)作為Reduce任務(wù)的輸入數(shù)據(jù)。Reduce對(duì)數(shù)據(jù)做進(jìn)一步處理之后,輸出最終結(jié)果。

Map Reduce是Hadoop的核心技術(shù)之一,為分布式計(jì)算的程序設(shè)計(jì)提供了良好的編程接口,并且屏蔽了底層通信原理,使得程序員只需關(guān)心業(yè)務(wù)邏輯本事,就可輕易的編寫出基于集群的分布式并行程序。從它名字上來(lái)看,大致可以看出個(gè)兩個(gè)動(dòng)詞Map和Reduce,“Map(展開)”就是將一個(gè)任務(wù)分解成為多個(gè)子任務(wù)并行的執(zhí)行,“Reduce”就是將分解后多任務(wù)處理的結(jié)果匯總起來(lái),得出最后的分析結(jié)果并輸出。

適合用?Map Reduce來(lái)處理的數(shù)據(jù)集(或任務(wù))有一個(gè)基本要求:待處理的數(shù)據(jù)集可以分解成許多小的數(shù)據(jù)集,而且每一個(gè)小數(shù)據(jù)集都可以完全并行地進(jìn)行處理。

想要徹底了解Hadoop系統(tǒng)的原理是十分困難的,由于篇幅有限,知識(shí)水平也不高,我只能描寫其大概面貌,本次課程設(shè)計(jì)的核心是學(xué)習(xí)搭建與運(yùn)用云計(jì)算平臺(tái),沒有足夠的時(shí)間與精力去完全了解Hadoop的原理,在這里我們不妨就理解為:

Hadoop系統(tǒng)=HDFS分布式文件系統(tǒng)+Map Reduce運(yùn)算機(jī)制。

這樣就能很好的明白它們的大致關(guān)系,有助于對(duì)后面實(shí)驗(yàn)的理解。

?

圖2-1 Hadoop系統(tǒng)架構(gòu)

2.2 Ubuntu系統(tǒng)

本次課程設(shè)計(jì)所使用的Linux統(tǒng)是ubuntu14。

Ubuntu烏班圖)是一個(gè)以桌面應(yīng)用為主的Linux操作系統(tǒng),其名稱來(lái)自非洲南部祖魯語(yǔ)或豪薩語(yǔ)的“Ubuntu”一詞,意思是“人性”、“我的存在是因?yàn)榇蠹业拇嬖凇?#xff0c;是非洲傳統(tǒng)的一種價(jià)值觀,類似華人社會(huì)的“仁愛”思想。Ubuntu基于Debian發(fā)行版和GNOME桌面環(huán)境,而從11.04版起,Ubuntu發(fā)行版放棄了Gnome桌面環(huán)境,改為Unity,與Debian的不同在于它每6個(gè)月會(huì)發(fā)布一個(gè)新版本。Ubuntu的目標(biāo)在于為一般用戶提供一個(gè)最新的、同時(shí)又相當(dāng)穩(wěn)定的主要由自由軟件構(gòu)建而成的操作系統(tǒng)。

LTS?是 Ubuntu?的長(zhǎng)期支持版,因此 Ubuntu 14.04 支持周期長(zhǎng)達(dá) 3-5 年。因此?Ubuntu 14.04 是追求穩(wěn)定的用戶和企業(yè)的最佳選擇。所以本次課程設(shè)計(jì)選擇ubuntu14.04LTS版本完全能夠應(yīng)付云平臺(tái)搭建與相關(guān)實(shí)驗(yàn)的任務(wù)。


圖2-2 ubuntu14.04LTS系統(tǒng)

3,云計(jì)算平臺(tái)搭建過程

3.1 Ubuntu系統(tǒng)的安裝

去Ubuntu官網(wǎng)下載好對(duì)應(yīng)版本的系統(tǒng)鏡像,并用虛擬光驅(qū)軟件加載鏡像,選擇安裝Ubuntu系統(tǒng),一路點(diǎn)擊繼續(xù)后大約10來(lái)分鐘就可以安裝好Ubuntu系統(tǒng)了。

3.2 Hadopp系統(tǒng)部署

修改機(jī)器名:

打開/etc/hostname文件,將/etc/hostname文件中的Ubuntu改為你想取的機(jī)器名。這里我取“s15“。重啟系統(tǒng)后才會(huì)生效。

安裝ssh服務(wù):

在terminal窗口中輸入:Sudoa apt-get install open ssh-server

建立ssh無(wú)密碼登錄本機(jī)

在terminal口中輸入:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa ??

?cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

得到如下圖說(shuō)明操作正確:

?

圖3-1 建立ssh無(wú)密碼登錄本機(jī)

登錄local host

在terminal口中輸入:bin/start-all.sh

安裝Hadoop :

下載Hadoop 安裝包并解壓,打開Hadoop/conf/Hadoop.sh文件,配置conf/Hadoop.sh找到#export JAVA_HOME=...一行,去掉#,然后加上本機(jī)JDK的路徑。

打開conf/core-site.XML文件,加入如下代碼:

<configuration> ?

<property> ???

??<name>fs.default.name</name> ???

??<value>hdfs://localhost:9000</value> ????

?</property> ???

</configuration> ?

打開conf/map red-site.XML文件,編輯如下:

<configuration> ???

?????<property> ????

??????<name>mapred.job.tracker</name> ???

??????<value>localhost:9001</value> ????

?????</property> ???

????</configuration> ???

打開conf/masters文件和conf/slaves件,添加secondary的主機(jī)名,作為單機(jī)版環(huán)境,這里只需填寫local host就Ok了。

到這里Hadoop系統(tǒng)就部署完畢了。調(diào)用bin/start-all.sh 命令即可以啟動(dòng)Hadoop,用JSP命令查看系統(tǒng)狀態(tài),出現(xiàn)如下信息說(shuō)明系統(tǒng)部署成功:

?

圖3-2?用jsp命令查看系統(tǒng)狀態(tài)

4,分布式云計(jì)算實(shí)驗(yàn)

?云平臺(tái)已經(jīng)搭建完畢,那么這只是第一步,關(guān)鍵還得學(xué)會(huì)怎么用它,為了能夠體現(xiàn)云計(jì)算與普通PC機(jī)計(jì)算能力的差異我特意為本次課設(shè)設(shè)計(jì)了一個(gè)專門用于對(duì)比的實(shí)驗(yàn)程序。

云計(jì)算的能力在于飛速處理大數(shù)據(jù),為了模擬大數(shù)據(jù),在一個(gè)TXT文本中循環(huán)寫入了七百多萬(wàn)單詞,為了便于寫入這么多單詞,在TXT文本中填充了7094304個(gè)“for”來(lái)模擬大數(shù)據(jù)。

接下來(lái)分別設(shè)計(jì)一個(gè)用于分布式計(jì)算的Map Reduce程序和在普通PC機(jī)上運(yùn)行的JAVA程序,該程序的功能是統(tǒng)計(jì)一個(gè)文本中的單詞數(shù)量,并輸出整個(gè)程序運(yùn)行耗費(fèi)時(shí)間。對(duì)比兩個(gè)程序在兩個(gè)環(huán)境中的運(yùn)算耗費(fèi)時(shí)間即可比較出二者的差異。

4.1 基于Map Reduce的分布式云計(jì)算實(shí)驗(yàn)

用于分布式計(jì)算的程序核心設(shè)計(jì)如下:

[cpp]?view plaincopy
  • public?static?void?main(String[]?Argus)?throws?Conception?{??
  • ???????????Date?d?=?new?Date();??
  • ??????long?begintime?=?d.getTime();??
  • JobConf?conf?=?new?JobConf(WordCount.class);??
  • conf.setJobName("wordcount");??
  • ???conf.setNumMapTasks(3);??
  • conf.setNumReduceTasks(2);????????
  • ??????conf.outspokenness(Text.class);??
  • conf.outclass(Inequitable.class);??
  • ????conf.setMapperClass(Map.class);??
  • conf.setCombinerClass(Reduce.class);??
  • conf.setReducerClass(Reduce.class);??
  • conf.setInputFormat(TextInputFormat.class);??
  • conf.setOutputFormat(TextOutputFormat.class);???JobClient.runJob(conf);??
  • ????????????????Date?d2?=?new?Date();??
  • ????????????long?endtime?=?d2.getTime();??
  • ?????????System.out.println("用時(shí):");??
  • ?????????System.out.print(endtime-begintime);??
  • ?????????????????System.out.println("?毫秒");?}??

  • 其中 Date d1d2用于捕獲程序運(yùn)行開始和結(jié)束的時(shí)間其時(shí)間差即為程序運(yùn)算所耗費(fèi)的時(shí)間;conf.setNumMapTasks(3)設(shè)置分布式運(yùn)算時(shí)所以的map數(shù)量為3個(gè),conf.setNumReduceTasks(2);設(shè)置運(yùn)算中所以的reduce數(shù)量為2個(gè),其他的設(shè)置為配置Map Reduce的其他必要參數(shù),在這里對(duì)本實(shí)驗(yàn)無(wú)影響就不解析了。

    想要利用云平臺(tái)來(lái)為我們做計(jì)算服務(wù)還要把寫好的Map Reduce程序進(jìn)行編譯,打包成庫(kù)文件,然后將模擬大數(shù)據(jù)的TXT文檔提交到HDFS間,執(zhí)行以下命令就能啟動(dòng)云計(jì)算了:

    bin/Hadoop as -put input/ input?把文件提交到HDFS空間

    bin/hadoop jar WordCount.jar WordCount input output?啟動(dòng)云計(jì)算

    得到的結(jié)果如下:

    ?

    圖4-1 云計(jì)算實(shí)驗(yàn)結(jié)果

    可以看到輸出結(jié)果為單詞”for”7094304個(gè),耗時(shí)49882毫秒。

    4.2 普通PC機(jī)上的對(duì)比實(shí)驗(yàn)

    在普通PC機(jī)上運(yùn)行的對(duì)比實(shí)驗(yàn)程序十分簡(jiǎn)單,就是對(duì)一個(gè)文本進(jìn)行讀取,然后逐行識(shí)別出單詞進(jìn)行統(tǒng)計(jì),其實(shí)現(xiàn)過程與Map Reduce程序中統(tǒng)計(jì)單詞部分所實(shí)現(xiàn)的功能一樣,詳情參見附錄。

    該程序在非分布式云計(jì)算環(huán)境中的實(shí)驗(yàn)結(jié)果如下:

    ?

    圖4-2 普通PC機(jī)實(shí)驗(yàn)結(jié)果

    可以看到輸出結(jié)果為單詞”for”也是7094304個(gè),耗時(shí)259973毫秒。

    4.3?分布式云計(jì)算實(shí)驗(yàn)結(jié)果與總結(jié)

    從兩個(gè)對(duì)比實(shí)驗(yàn)中我們非常清楚的看到同樣都是統(tǒng)計(jì)7094304個(gè)單詞的運(yùn)算普通PC機(jī)程序耗費(fèi)了259973毫秒,而分布式云計(jì)算只用了49882毫秒,分布式云計(jì)算比普通的計(jì)算快了足足5倍有余,并且由于計(jì)算速度受服務(wù)器好壞的影響,這個(gè)數(shù)據(jù)也只是在我的破電腦上的結(jié)果,如果在更強(qiáng)大的服務(wù)器上運(yùn)行那就會(huì)有更大的差距。

    本設(shè)計(jì)做的這個(gè)對(duì)比實(shí)驗(yàn)雖然簡(jiǎn)陋,但是麻雀雖小,五臟齊全,同樣能夠很好的對(duì)比出兩種運(yùn)算的優(yōu)劣。除此之外,在相關(guān)的文獻(xiàn)查看過程中發(fā)現(xiàn)云計(jì)算在數(shù)據(jù)越大優(yōu)越性越能體現(xiàn)出來(lái)。事實(shí)上真正搭建好的集群式云計(jì)算平臺(tái)對(duì)于上GB的大數(shù)據(jù)都是秒內(nèi)完成的,這就是云計(jì)算的強(qiáng)大!

    經(jīng)過這次實(shí)驗(yàn)可以看出,云計(jì)算有足夠的能力處理物聯(lián)網(wǎng)中龐大的數(shù)據(jù),在萬(wàn)物互聯(lián)中產(chǎn)生的無(wú)數(shù)的數(shù)據(jù)就可以用云計(jì)算技術(shù)加以綜合分析從而來(lái)更好的服務(wù)于物聯(lián)網(wǎng)。

    ?5, 課程設(shè)計(jì)總結(jié)

    本次課程設(shè)計(jì)總的來(lái)說(shuō)進(jìn)行的還是很順利的,一開始在本設(shè)計(jì)中采用主流的虛擬機(jī)加開源云平臺(tái)的方法進(jìn)行云平臺(tái)搭建,但是在反復(fù)試了多種辦法后都失敗了,之后選擇直接安裝Ubuntu系統(tǒng)來(lái)搭建云平臺(tái),后來(lái)回想起來(lái)這果然是個(gè)聰明的決定,因?yàn)樵诩僉inux系統(tǒng)下部署云平臺(tái)的所有操作都進(jìn)行的十分順利沒有出現(xiàn)任何意外。

    部署云平臺(tái)進(jìn)行的十分順利從而有了更多的時(shí)間來(lái)學(xué)習(xí)和設(shè)計(jì)對(duì)比實(shí)驗(yàn)。本以為這個(gè)對(duì)比實(shí)驗(yàn)不就是寫一個(gè)普通的統(tǒng)計(jì)單詞的JAVA程序嘛,后來(lái)才知道提交到云計(jì)算平臺(tái)的程序結(jié)構(gòu)是有一定語(yǔ)法結(jié)構(gòu)的,并且需要在程序代碼中手動(dòng)設(shè)置Map Reduce的各項(xiàng)參數(shù),如果不學(xué)一學(xué)Map Reduce程序的相關(guān)知識(shí)根本沒法寫出一個(gè)簡(jiǎn)單的Map Reduce程序,于是借閱了《Hadoop大數(shù)據(jù)處理》和《Hadoop權(quán)威指南》等書籍,學(xué)習(xí)了幾天后才出步了解Map Reduce程序的基本結(jié)構(gòu)和語(yǔ)法,設(shè)計(jì)的對(duì)比實(shí)驗(yàn)程序也就順利出爐了。

    普通的PC機(jī)計(jì)算能力統(tǒng)計(jì)了七百多萬(wàn)個(gè)單詞整整耗費(fèi)了約4分鐘的時(shí)間,當(dāng)用云計(jì)算來(lái)做這個(gè)運(yùn)算時(shí)真正的被它的處理速度震撼到了,它竟然只用了不到50秒!第一次真正直觀體驗(yàn)到到云計(jì)算的強(qiáng)大就在這一刻開始了!

    后來(lái)又做了更多的實(shí)驗(yàn),發(fā)現(xiàn)數(shù)據(jù)越大,兩種處理方法的對(duì)比也就越明顯,怪不得現(xiàn)在主流的互聯(lián)網(wǎng)公司都要部署云計(jì)算,沒有這么強(qiáng)大的計(jì)算能力,世界與日俱增的大數(shù)據(jù)怎么處理的過來(lái)呢!

    6,附錄


    Map Reduce程序:

    [cpp]?view plaincopy
  • import?java.util.*;??
  • import?java.io.IOException;??
  • import?java.util.Iterator;??
  • import?java.util.StringTokenizer;??
  • ??
  • import?org.apache.hadoop.fs.Path;??
  • import?org.apache.hadoop.io.IntWritable;??
  • import?org.apache.hadoop.io.LongWritable;??
  • import?org.apache.hadoop.io.Text;??
  • import?org.apache.hadoop.mapred.FileInputFormat;??
  • import?org.apache.hadoop.mapred.FileOutputFormat;??
  • import?org.apache.hadoop.mapred.JobClient;??
  • import?org.apache.hadoop.mapred.JobConf;??
  • import?org.apache.hadoop.mapred.MapReduceBase;??
  • import?org.apache.hadoop.mapred.Mapper;??
  • import?org.apache.hadoop.mapred.OutputCollector;??
  • import?org.apache.hadoop.mapred.Reducer;??
  • import?org.apache.hadoop.mapred.Reporter;??
  • import?org.apache.hadoop.mapred.TextInputFormat;??
  • import?org.apache.hadoop.mapred.TextOutputFormat;??
  • import?java.text.SimpleDateFormat;??
  • public?class?WordCount?{??
  • ??
  • ????public?static?class?Map?extends?MapReduceBase?implements?//map??
  • ????????????Mapper<LongWritable,?Text,?Text,?IntWritable>?{??
  • ????????private?final?static?IntWritable?one?=?new?IntWritable(1);????
  • ????????private?final?Text?word?=?new?Text();??
  • ????????@Override??
  • ????????public?void?map(LongWritable?key,?Text?value,??
  • ????????????????OutputCollector<Text,?IntWritable>?output,?Reporter?reporter)??
  • ????????????????throws?IOException?{??
  • ????????????String?line?=?value.toString();??
  • ????????????StringTokenizer?tokenizer?=?new?StringTokenizer(line);??//讀取文本內(nèi)容??
  • ????????????while?(tokenizer.hasMoreTokens())?{??????//對(duì)每個(gè)MAP開始各自計(jì)數(shù)??
  • ????????????????word.set(tokenizer.nextToken());??
  • ????????????????output.collect(word,?one);??
  • ????????????}??
  • ????????}??
  • ????}??
  • ??
  • ????public?static?class?Reduce?extends?MapReduceBase?implements??//Reduce??
  • ????????????Reducer<Text,?IntWritable,?Text,?IntWritable>?{??
  • ????????@Override??
  • ????????public?void?reduce(Text?key,?Iterator<IntWritable>?values,??
  • ????????????????OutputCollector<Text,?IntWritable>?output,?Reporter?reporter)??
  • ????????????????throws?IOException?{??
  • ????????????int?sum?=?0;??
  • ????????????while?(values.hasNext())?{??
  • ????????????????sum?+=?values.next().get();???//將所有MAP記得數(shù)相加??
  • ????????????}??
  • ????????????output.collect(key,?new?IntWritable(sum));??//匯總??
  • ????????}??
  • ????}??
  • ????public?static?void?main(String[]?args)?throws?IOException?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ??????????????Date?d?=?new?Date();??
  • ?????????long?begintime?=?d.getTime();????
  • ????????JobConf?conf?=?new?JobConf(WordCount.class);??
  • ????????conf.setJobName("wordcount");??
  • ??????????
  • ????????//設(shè)定MAP數(shù)??????
  • ????????conf.setNumMapTasks(3);??
  • ????????//設(shè)定REDUCE數(shù)??
  • ????????conf.setNumReduceTasks(2);??
  • ????????//?設(shè)定輸出的key和value類型??
  • ????????conf.setOutputKeyClass(Text.class);??
  • ????????conf.setOutputValueClass(IntWritable.class);??
  • ????????//?設(shè)定各個(gè)作業(yè)的類??
  • ????????conf.setMapperClass(Map.class);??
  • ????????conf.setCombinerClass(Reduce.class);??
  • ????????conf.setReducerClass(Reduce.class);??
  • ????????//?設(shè)定輸入輸出的格式??
  • ????????conf.setInputFormat(TextInputFormat.class);??
  • ????????conf.setOutputFormat(TextOutputFormat.class);??
  • ????????FileInputFormat.setInputPaths(conf,?new?Path(args[0]));??
  • ????????FileOutputFormat.setOutputPath(conf,?new?Path(args[1]));??
  • ????????JobClient.runJob(conf);??
  • ????????????????Date?d2?=?new?Date();??
  • ????????????long?endtime?=?d2.getTime();??????
  • ?????????????System.out.println("用時(shí):");??
  • ?????????????System.out.print(endtime-begintime);??
  • ?????????????????System.out.println("?毫秒");??

  • 用于對(duì)比的統(tǒng)計(jì)單詞程序:import java.io.File;

    [cpp]?view plaincopy
  • import?java.io.FileNotFoundException;??
  • import?java.util.Scanner;??
  • ?import?java.util.*;??
  • import?java.text.SimpleDateFormat;??
  • public?class?Readtxt?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????Date?d?=?new?Date();??
  • ????long?begintime?=?d.getTime();?????
  • ????int?count?=?0;??
  • ????????try?{??
  • ????????????Scanner?in?=?new?Scanner(new?File("testtxt.txt"));??
  • ????
  • ????????????while?(in.hasNext())?{??
  • ????????????????String?str?=?in.next();??
  • ????????????????splitt(str);??
  • ????????????????count++;?????
  • ????????????}??
  • ????????}?catch?(FileNotFoundException?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????System.out.println("這個(gè)文本內(nèi)單詞的個(gè)數(shù)是:"+count);??
  • ????????Date?d2?=?new?Date();??
  • ????????long?endtime?=?d2.getTime();??????
  • ????????System.out.println("用時(shí):");??
  • ????????System.out.print(endtime-begintime);??
  • ????????System.out.println("?毫秒");??
  • ????}??
  • ????public?static?void?splitt(String?str){??
  • ????????String?strr?=?str.trim();??
  • ????????String[]?abc?=?strr.split("[\\p{Space}]+");??
  • ????????for(int?i=0;i<abc.length;i++)??
  • ????{??
  • ????System.out.println(abc[i]);??
  • ????????}??
  • ????}??
  • ???????
  • }??
  • 總結(jié)

    以上是生活随笔為你收集整理的云计算平台构建与实验设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。