云计算平台构建与实验设计
課程設計任務書
一、作業目的
? ? 物聯網的核心是應用,應用的核心是云計算。通過構建一個云計算平臺,并利用這個平臺設計云計算實驗,將結果與普通的電腦計算比較兩者的差別,感受云計算的優越性能,從而對物聯網有更深刻的體驗與認識。
二、作業內容及要求
????能夠按照課程設計任務書按照相應的要求完成整個云計算平臺的搭建,要完成這個任務,就要對云計算平臺的架構和原理有一定的認識,對物聯網的應用層有深入的學習,通過查閱書籍文獻與網絡資料去掌握相關知識,完成云平臺的構建與實驗的設計。
三、作業成果形式及提交要求
做出實驗成果,并向驗收老師展示其功能和實現原理,回答老師提出的相關問題;提交實驗程序和報告。提交要求是實物驗收必須得到老師的肯定,報告必須能清晰說明實驗過程與原理,嚴謹有說服力。
四、參考文獻
[1] Hadoop權威指南,清華大學出版社,2010-5-1
[2] NIST Cloud Computing Program,http://www.nist.gov/itl/cloud/
[3] Hadoop大數據處理,人民郵電出版社,2013-09-01
[4] 虛擬化與云計算,電子工業出版社,2009-10-1
[5] 走近云計算,人民郵電出版社,2009年
[6] Hadoop實戰,人民郵電出版社,2011年10月
[7] Hadoop云計算實戰,清華大學出版社,2012-10
目錄
課程設計任務書
目錄
摘要
1 緒論
??1.1 云計算概述
????1.1.1 云計算的五大核心特點
????1.1.2 云計算的三種服務模式
??1.2 Hadoop系統概述
??1.3 云計算平臺搭建方法
??1.4 本次課設所用平臺與搭建方法
2.云計算平臺原理
??2.1 Hadoop系統原理
??2.2 ubuntu系統
3.云計算平臺搭建過程?
??3.1 ubuntu系統的安裝?
??3.2 Hadoop系統部署?
4.分布式云計算實驗?
??4.1基于MapReduce的分布式云計算實驗?
??4.2 普通PC機上的對比實驗?
??4.3分布式云計算實驗結果與總結?
5.課程設計總結
6.附錄
摘要
物聯網的核心是應用,應用的核心是云計算。從一開始學習物聯網這門課開始就不斷的聽到云計算的介紹,并且隨著學習的深入,越來越感受到云計算在物聯網中的重要作用,沒錯,物聯網的核心是應用,應用的核心是云計算。世界已經悄然進入到大數據時代,大數據的處理依靠傳統手段已經捉襟見肘,隨著云計算的出現,大數據的潛力才充分發掘出來,物聯網也正是接著云計算的東風才能夠發展到今天這種深刻改變人們生活方式的地步。
云計算是物聯網的應用層,做云計算關鍵要學會怎么去運用物聯網,為此需要查閱與云計算有關的書籍,網上牛人的筆記和國外網站的資料,親手設計與實現分布式程序進行實驗,從而直觀的感受到云計算的強大與物聯網的無處不在。
云計算的重要性不言而喻,物聯網的發展離不開云計算,所以研究云計算的搭建與運用是具有極大的意義。
關鍵詞:物聯網 ?云計算 云計算平臺搭建 分布式計算
1,緒論
1.1?云計算概述
在參考文獻2里,NIST對云計算定義如下:云計算是一種能夠通過網絡以便利的、按需付費的方式獲取計算資源(包括網絡、服務器、存儲、應用和服務等)并提高其可用性的模式,這些資源來自一個共享的、可配置的資源池,并能夠以最省力和無人干預的方式獲取和釋放。這種模式具有5個關鍵功能,還包括3種服務模式和4種部署方式。
1.1.1云計算的五大核心特點:
按需自助服務(On Demand Self-Service):供應商的資源保持高可用和高就緒的狀態,用戶可以按需方便地自助地獲得資源。
泛在的網絡訪問(Broad Network Access):可以通過各種網絡渠道,以統一標準的機制(如瀏覽器,相同的API等)獲取服務,但是客戶端可以是多種多樣的瘦客戶端或富客戶端(例如移動電話、筆記本電腦、PDA等)。
動態的資源池(Resource Pooling):供應商的計算資源可以被整合為一個動態資源池,以多租戶模式服務所有客戶,不同的物理和虛擬資源可根據客戶需求動態分配。服務商需實現資源的位置無關性,客戶一般不需要知道所使用的資源的確切地理位置,但在需要的時候客戶可以指定資源位置(如哪個國家,哪個數據中心等)的要求。
快速彈性(Rapid Elasticity):可以迅速、彈性地提供服務,能快速擴展,也可以快速釋放實現快速縮小。對客戶來說,可以租用的資源看起來似乎是無限的,可在任何時間購買任何數量的資源。
可計量的服務(Measured Service):服務的收費可以是基于計量的一次一付,或基于廣告的收費模式。系統以針對不同服務需求(例如,CPU時間、存儲空間、帶寬、甚至按用戶賬號的使用率高低)來計量資源的使用情況和定價,以提高資源的管控能力和促進優化利用。整個系統資源可以通過監控和報表的方式對服務提供者和使用者透明化。
1.1.2云計算的三種服務模式
云計算的三個服務模式(Delivery Models)是:SaaS、PaaS和IaaS。
SaaS:提供給客戶的服務是運營商運行在云計算基礎設施上的應用程序,用戶可以在各種設備上通過瘦客戶端界面訪問,如瀏覽器。消費者不需要管理或控制任何云計算基礎設施,包括網絡、服務器、操作系統、存儲,等等。
PaaS:提供給消費者的服務是把客戶采用提供的開發語言和工具(例如Java、Python、.Net等)開發的或收購的應用程序部署到供應商的云計算基礎設施上。客戶不需要管理或控制底層的云基礎設施,包括網絡、服務器、操作系統、存儲等,但客戶能控制部署的應用程序,也可能控制運行應用程序的托管環境配置。
IaaS: 提供給消費者的服務是對所有設施的利用,包括處理、存儲、網絡和其他基本的計算資源,用戶能夠部署和運行任意軟件,包括操作系統和應用程序。消費者不管理或控制任何云計算基礎設施,但能控制操作系統的選擇、儲存空間、部署的應用,也有可能獲得有限制的網絡組件(例如,防火墻、負載均衡器等)的控制。
目前世界大多數互聯網公司都開始布局云計算,Google,華為,BAT,亞馬遜也都已經將云計算成熟運用與自己的生態系統,并產生巨大的效益。國內外關于云計算的研究都在火熱的進行中。無論是收費的云計算服務還是開源云計算研究都趨于白熱化,可見云計算在未來各個領域非同一般的潛力。
1.2 Hadoop系統概述
Hadoop是一個由Apache基金會所開發的分布式系統基礎架構。 Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,并且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有著超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。
Hadoop的框架最核心的設計就是:HDFS和Map Reduce。HDFS為海量的數據提供了存儲,則Map Reduce為海量的數據提供了計算。
?
圖1-1?HDFS文件系統結構
?
圖1-2?Map Reduce工作流程
Hadoop技術已經無處不在。不管是好是壞,Hadoop已經成為大數據的代名詞。短短幾年間,Hadoop從一種邊緣技術成為事實上的標準,不僅現在Hadoop是企業大數據的標準,而且在未來,它的地位似乎一時難以動搖。
1.3 云計算平臺搭建方法
目前開源的云計算平臺的搭建都要依托Linux系統,因此我們有2種辦法搭建云計算平臺:安裝Linux系統和在其他操作系統下安裝Linux虛擬機后搭建云平臺。目前主流的虛擬機有:
Virtual Box
Vmware
有了Linux系統環境后就能搭建云計算平臺了,幾大開源云平臺系統有:
Hadoop系統
Open Stack
云計算平臺的搭建=Linux系統+開源云平臺+SSH框架。
1.4 本次課設所用平臺與搭建方法
一開始本設計采用的是虛擬機+Hadoop系統+SSH框架搭建自己的云計算平臺,發現在虛擬機下的Linux系統無法下載一些系統關鍵應用導致云平臺無法搭建,前后實驗多次后直接給在純Linux系統部署云計算平臺從而成功搭建好云平臺,本次課程設計所采用的搭建辦法是:
Ubuntu14.04系統+Hadoop系統+SSH框架。
2,云計算平臺原理
2.1?Hadoop系統原理
Hadoop是一個開源的可運行于大規模集群上的分布式并行編程框架,其最核心的設計包括:Map Reduce和HDFS。基于 Hadoop,你可以輕松地編寫可處理海量數據的分布式并行程序,并將其運行于由成百上千個結點組成的大規模計算機集群上。
簡單的說:Map Reduce框架的核心步驟主要分兩部分:Map和Reduce。當你向Map Reduce框架提交一個計算作業時,它會首先把計算作業拆分成若干個Map任務,然后分配到不同的節點上去執行,每一個Map任務處理輸入數據中的一部分,當Map任務完成后,它會生成一些中間文件,這些中間文件將會作為Reduce任務的輸入數據。Reduce對數據做進一步處理之后,輸出最終結果。
Map Reduce是Hadoop的核心技術之一,為分布式計算的程序設計提供了良好的編程接口,并且屏蔽了底層通信原理,使得程序員只需關心業務邏輯本事,就可輕易的編寫出基于集群的分布式并行程序。從它名字上來看,大致可以看出個兩個動詞Map和Reduce,“Map(展開)”就是將一個任務分解成為多個子任務并行的執行,“Reduce”就是將分解后多任務處理的結果匯總起來,得出最后的分析結果并輸出。
適合用?Map Reduce來處理的數據集(或任務)有一個基本要求:待處理的數據集可以分解成許多小的數據集,而且每一個小數據集都可以完全并行地進行處理。
想要徹底了解Hadoop系統的原理是十分困難的,由于篇幅有限,知識水平也不高,我只能描寫其大概面貌,本次課程設計的核心是學習搭建與運用云計算平臺,沒有足夠的時間與精力去完全了解Hadoop的原理,在這里我們不妨就理解為:
Hadoop系統=HDFS分布式文件系統+Map Reduce運算機制。
這樣就能很好的明白它們的大致關系,有助于對后面實驗的理解。
?
圖2-1 Hadoop系統架構
2.2 Ubuntu系統
本次課程設計所使用的Linux系統是ubuntu14。
Ubuntu(烏班圖)是一個以桌面應用為主的Linux操作系統,其名稱來自非洲南部祖魯語或豪薩語的“Ubuntu”一詞,意思是“人性”、“我的存在是因為大家的存在”,是非洲傳統的一種價值觀,類似華人社會的“仁愛”思想。Ubuntu基于Debian發行版和GNOME桌面環境,而從11.04版起,Ubuntu發行版放棄了Gnome桌面環境,改為Unity,與Debian的不同在于它每6個月會發布一個新版本。Ubuntu的目標在于為一般用戶提供一個最新的、同時又相當穩定的主要由自由軟件構建而成的操作系統。
LTS?是 Ubuntu?的長期支持版,因此 Ubuntu 14.04 支持周期長達 3-5 年。因此?Ubuntu 14.04 是追求穩定的用戶和企業的最佳選擇。所以本次課程設計選擇ubuntu14.04LTS版本完全能夠應付云平臺搭建與相關實驗的任務。
圖2-2 ubuntu14.04LTS系統
3,云計算平臺搭建過程
3.1 Ubuntu系統的安裝
去Ubuntu官網下載好對應版本的系統鏡像,并用虛擬光驅軟件加載鏡像,選擇安裝Ubuntu系統,一路點擊繼續后大約10來分鐘就可以安裝好Ubuntu系統了。
3.2 Hadopp系統部署
修改機器名:
打開/etc/hostname文件,將/etc/hostname文件中的Ubuntu改為你想取的機器名。這里我取“s15“。重啟系統后才會生效。
安裝ssh服務:
在terminal窗口中輸入:Sudoa apt-get install open ssh-server
建立ssh無密碼登錄本機
在terminal窗口中輸入:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa ??
?cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
得到如下圖說明操作正確:
?
圖3-1 建立ssh無密碼登錄本機
登錄local host:
在terminal窗口中輸入:bin/start-all.sh
安裝Hadoop :
下載Hadoop 安裝包并解壓,打開Hadoop/conf/Hadoop.sh文件,配置conf/Hadoop.sh:找到#export JAVA_HOME=...一行,去掉#,然后加上本機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的主機名,作為單機版環境,這里只需填寫local host就Ok了。
到這里Hadoop系統就部署完畢了。調用bin/start-all.sh 命令即可以啟動Hadoop,用JSP命令查看系統狀態,出現如下信息說明系統部署成功:
?
圖3-2?用jsp命令查看系統狀態
4,分布式云計算實驗
?云平臺已經搭建完畢,那么這只是第一步,關鍵還得學會怎么用它,為了能夠體現云計算與普通PC機計算能力的差異我特意為本次課設設計了一個專門用于對比的實驗程序。
云計算的能力在于飛速處理大數據,為了模擬大數據,在一個TXT文本中循環寫入了七百多萬單詞,為了便于寫入這么多單詞,在TXT文本中填充了7094304個“for”來模擬大數據。
接下來分別設計一個用于分布式計算的Map Reduce程序和在普通PC機上運行的JAVA程序,該程序的功能是統計一個文本中的單詞數量,并輸出整個程序運行耗費時間。對比兩個程序在兩個環境中的運算耗費時間即可比較出二者的差異。
4.1 基于Map Reduce的分布式云計算實驗
用于分布式計算的程序核心設計如下:
[cpp]?view plaincopy其中 Date d1,d2用于捕獲程序運行開始和結束的時間其時間差即為程序運算所耗費的時間;conf.setNumMapTasks(3)設置分布式運算時所以的map數量為3個,conf.setNumReduceTasks(2);設置運算中所以的reduce數量為2個,其他的設置為配置Map Reduce的其他必要參數,在這里對本實驗無影響就不解析了。
想要利用云平臺來為我們做計算服務還要把寫好的Map Reduce程序進行編譯,打包成庫文件,然后將模擬大數據的TXT文檔提交到HDFS空間,執行以下命令就能啟動云計算了:
bin/Hadoop as -put input/ input?把文件提交到HDFS空間
bin/hadoop jar WordCount.jar WordCount input output?啟動云計算
得到的結果如下:
?
圖4-1 云計算實驗結果
可以看到輸出結果為單詞”for”7094304個,耗時49882毫秒。
4.2 普通PC機上的對比實驗
在普通PC機上運行的對比實驗程序十分簡單,就是對一個文本進行讀取,然后逐行識別出單詞進行統計,其實現過程與Map Reduce程序中統計單詞部分所實現的功能一樣,詳情參見附錄。
該程序在非分布式云計算環境中的實驗結果如下:
?
圖4-2 普通PC機實驗結果
可以看到輸出結果為單詞”for”也是7094304個,耗時259973毫秒。
4.3?分布式云計算實驗結果與總結
從兩個對比實驗中我們非常清楚的看到同樣都是統計7094304個單詞的運算普通PC機程序耗費了259973毫秒,而分布式云計算只用了49882毫秒,分布式云計算比普通的計算快了足足5倍有余,并且由于計算速度受服務器好壞的影響,這個數據也只是在我的破電腦上的結果,如果在更強大的服務器上運行那就會有更大的差距。
本設計做的這個對比實驗雖然簡陋,但是麻雀雖小,五臟齊全,同樣能夠很好的對比出兩種運算的優劣。除此之外,在相關的文獻查看過程中發現云計算在數據越大優越性越能體現出來。事實上真正搭建好的集群式云計算平臺對于上GB的大數據都是秒內完成的,這就是云計算的強大!
經過這次實驗可以看出,云計算有足夠的能力處理物聯網中龐大的數據,在萬物互聯中產生的無數的數據就可以用云計算技術加以綜合分析從而來更好的服務于物聯網。
?5, 課程設計總結
本次課程設計總的來說進行的還是很順利的,一開始在本設計中采用主流的虛擬機加開源云平臺的方法進行云平臺搭建,但是在反復試了多種辦法后都失敗了,之后選擇直接安裝Ubuntu系統來搭建云平臺,后來回想起來這果然是個聰明的決定,因為在純Linux系統下部署云平臺的所有操作都進行的十分順利沒有出現任何意外。
部署云平臺進行的十分順利從而有了更多的時間來學習和設計對比實驗。本以為這個對比實驗不就是寫一個普通的統計單詞的JAVA程序嘛,后來才知道提交到云計算平臺的程序結構是有一定語法結構的,并且需要在程序代碼中手動設置Map Reduce的各項參數,如果不學一學Map Reduce程序的相關知識根本沒法寫出一個簡單的Map Reduce程序,于是借閱了《Hadoop大數據處理》和《Hadoop權威指南》等書籍,學習了幾天后才出步了解Map Reduce程序的基本結構和語法,設計的對比實驗程序也就順利出爐了。
普通的PC機計算能力統計了七百多萬個單詞整整耗費了約4分鐘的時間,當用云計算來做這個運算時真正的被它的處理速度震撼到了,它竟然只用了不到50秒!第一次真正直觀體驗到到云計算的強大就在這一刻開始了!
后來又做了更多的實驗,發現數據越大,兩種處理方法的對比也就越明顯,怪不得現在主流的互聯網公司都要部署云計算,沒有這么強大的計算能力,世界與日俱增的大數據怎么處理的過來呢!
6,附錄
Map Reduce程序:
[cpp]?view plaincopy
用于對比的統計單詞程序:import java.io.File;
[cpp]?view plaincopy總結
以上是生活随笔為你收集整理的云计算平台构建与实验设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (翻译)黑底白字样式的使用时机
- 下一篇: DataFormatString格式化