版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ComputerSchool,NUDT.Spring,20131Chapter6:CloudProgramming
andSoftwareEnvironments
云編程和軟件環(huán)境
ComputerSchool,NUDT.Spring,20132本章將論述真實(shí)云平臺(tái)下的編程,其中將介紹和評(píng)價(jià)MapReduce、BigTable、Twister、Dryad、DryadLINQ、Hadoop、Sawzall和PigLatin。我們用具體的實(shí)例來(lái)講解云中的實(shí)現(xiàn)和應(yīng)用需求。通過(guò)應(yīng)用實(shí)例講解了由谷歌應(yīng)用引擎(GAE)、亞馬遜Web服務(wù)(AWS)和微軟WindowsAzure提供的云服務(wù)。特別地,我們演示了怎樣對(duì)GAE、AWSEC2、S3和EBS編程。ComputerSchool,NUDT.Spring,20133CloudApplicationsScientific/TechApplicationsBusinessApplicationsConsumer/SocialApplicationsScienceandTechnicalApplicationsBusinessApplicationsConsumer/SocialApplicationsComputerSchool,NUDT.Spring,20134TheChangingNatureofResearchComputationalLast
fewdecadesTheFourthParadigmExperimentalThousand
yearsagoTodayandtheFutureTheoreticalLastfew
hundredyearsSimulationof
complexphenomenaNewton’slaws,
Maxwell’sequations…DescriptionofnaturalphenomenaUnifytheory,experimentandsimulationwithlargemultidisciplinaryDataUsingdataexplorationanddatamining(frominstruments,sensors,humans…)DistributedCommunitiesComputerSchool,NUDT.Spring,201356.1云和網(wǎng)格平臺(tái)的特性本節(jié)總結(jié)了真實(shí)云和網(wǎng)格平臺(tái)的重要特性。在4個(gè)表格中,涵蓋了功能、傳統(tǒng)特性、數(shù)據(jù)特性以及程序員和運(yùn)行時(shí)系統(tǒng)使用的特性。ComputerSchool,NUDT.Spring,20136ComputerSchool,NUDT.Spring,20137ComputerSchool,NUDT.Spring,20138ComputerSchool,NUDT.Spring,20139ComputerSchool,NUDT.Spring,201310網(wǎng)格和云的公共傳統(tǒng)特性集中關(guān)注當(dāng)今計(jì)算網(wǎng)格和云中有關(guān)工作流、數(shù)據(jù)傳輸、安全和可用性方面的公共特性。
工作流:在真實(shí)的應(yīng)用中工作流按需連接多個(gè)云和非云服務(wù)。數(shù)據(jù)傳輸:在商業(yè)云中(較少程度上,在商業(yè)云之外)數(shù)據(jù)傳輸?shù)某杀荆〞r(shí)間和金錢)經(jīng)常被認(rèn)為是使用云的一個(gè)難點(diǎn)。如果商業(yè)云成為一個(gè)國(guó)家計(jì)算機(jī)基礎(chǔ)設(shè)施的重要部分,預(yù)期在云和TeraGrid之間將出現(xiàn)一條高帶寬鏈路。
ComputerSchool,NUDT.Spring,201311云編程環(huán)境的安全、隱私和可用性需求:使用虛擬集群化來(lái)實(shí)現(xiàn)用最小的開銷成本達(dá)到動(dòng)態(tài)資源供應(yīng)。使用穩(wěn)定和持續(xù)的數(shù)據(jù)存儲(chǔ),帶有用于信息檢索的快速查詢。使用特殊的API來(lái)驗(yàn)證用戶及使用商業(yè)賬戶發(fā)送電子郵件。使用像HTTPS或者SSL等安全協(xié)議來(lái)訪問(wèn)云資源。需要細(xì)粒度訪問(wèn)控制來(lái)保護(hù)數(shù)據(jù)完整性,阻止侵入者或黑客。保護(hù)共享的數(shù)據(jù)集,以防惡意篡改、刪除或者版權(quán)侵犯。包括增強(qiáng)的可用性和帶有虛擬機(jī)實(shí)時(shí)遷移的災(zāi)難恢復(fù)等特性。使用信用系統(tǒng)來(lái)保護(hù)數(shù)據(jù)中心。這個(gè)系統(tǒng)只授權(quán)給可信用戶,并阻止侵入者。
ComputerSchool,NUDT.Spring,201312數(shù)據(jù)特性和數(shù)據(jù)庫(kù)程序庫(kù):允許方便地部署和配置鏡像(即它們支持IaaS)。blob和驅(qū)動(dòng):除了blob和S3的服務(wù)接口,人們還可以“直接”附加到計(jì)算實(shí)例中作為Azure驅(qū)動(dòng)和亞馬遜的彈性塊存儲(chǔ)。這個(gè)概念類似于共享文件系統(tǒng)DPFS:DPFS文件系統(tǒng)是為執(zhí)行數(shù)據(jù)密集型應(yīng)用而精確設(shè)計(jì)的。ComputerSchool,NUDT.Spring,201313SQL和關(guān)系型數(shù)據(jù)庫(kù):亞馬遜和Azure云都提供關(guān)系型數(shù)據(jù)庫(kù),這可以直接為學(xué)術(shù)系統(tǒng)提供一個(gè)類似的功能,但如果是需要大規(guī)模數(shù)據(jù),事實(shí)上,基于表或MapReduce的方法可能會(huì)更合適表格和NOSQL非關(guān)系型數(shù)據(jù)庫(kù):在簡(jiǎn)化數(shù)據(jù)庫(kù)結(jié)構(gòu)(NOSQL)上已經(jīng)有了很多重要的進(jìn)展,典型情況強(qiáng)調(diào)了分布式和可擴(kuò)展性。這些進(jìn)展體現(xiàn)在三種主要云里:谷歌的BigTable、亞馬遜的SimpleDB和Azure的AzureTable隊(duì)列服務(wù):亞馬遜和Azure都能提供類似的可擴(kuò)展、健壯的隊(duì)列服務(wù),用來(lái)在一個(gè)應(yīng)用的組件之間通信。
ComputerSchool,NUDT.Spring,201314編程和運(yùn)行時(shí)支持需要編程和運(yùn)行時(shí)支持來(lái)促進(jìn)并行編程,并為今天的網(wǎng)格和云上的重要功能提供運(yùn)行時(shí)支持。工作機(jī)和Web角色:Azure引入的角色提供了重要功能,并有可能在非虛擬化環(huán)境中保留更好的密切度支持。工作機(jī)角色是基本的可調(diào)度過(guò)程,并能自動(dòng)啟動(dòng)。注意在云上沒(méi)有必要進(jìn)行明顯的調(diào)度,無(wú)論是對(duì)個(gè)人工作機(jī)角色還是MapReduce透明支持的“群組調(diào)度”。在這里,隊(duì)列是一個(gè)關(guān)鍵概念ComputerSchool,NUDT.Spring,201315MapReduce:
“數(shù)據(jù)并行”語(yǔ)言日益受到廣泛關(guān)注,這種語(yǔ)言主要的目的在于在不同數(shù)據(jù)樣本上執(zhí)行松耦合的計(jì)算。語(yǔ)言和運(yùn)行時(shí)產(chǎn)生和提供了“多任務(wù)”問(wèn)題的有效執(zhí)行,著名的成功案例就是網(wǎng)格應(yīng)用。然而,與傳統(tǒng)方法相比,表6-5中總結(jié)的MapReduce對(duì)于多任務(wù)問(wèn)題的實(shí)現(xiàn)有一些優(yōu)點(diǎn),因?yàn)樗С謩?dòng)態(tài)執(zhí)行、強(qiáng)容錯(cuò)性以及一個(gè)容易使用的高層接口。主要的開源/商用MapReduce實(shí)現(xiàn)是Hadoop和Dryad,其執(zhí)行可能用到或者不用虛擬機(jī)。ComputerSchool,NUDT.Spring,201316ComputerSchool,NUDT.Spring,201317
云編程模型:前面的大多數(shù)內(nèi)容都是描述編程模型特性,但是還有很多“宏觀的”架構(gòu),并不能作為代碼(語(yǔ)言和庫(kù))。GAE和ManjrasoftAneka環(huán)境都代表編程模型;都適用于云,但實(shí)際上并不是針對(duì)這個(gè)體系結(jié)構(gòu)的。迭代MapReduce是一個(gè)有用的編程模型,它提供了在云、HPC和集群環(huán)境之間的可移植性。軟件即服務(wù):服務(wù)在商業(yè)云和大部分現(xiàn)代分布式系統(tǒng)中以類似的方式使用。我們希望用戶能盡可能地封裝他們的程序,這樣不需要特殊的支持來(lái)實(shí)現(xiàn)軟件即服務(wù)。ComputerSchool,NUDT.Spring,2013186.2并行和分布式編程范式我們把并行和分布式程序定義為運(yùn)行在多個(gè)計(jì)算引擎或一個(gè)分布式計(jì)算系統(tǒng)上的并行程序。這個(gè)術(shù)語(yǔ)包含計(jì)算機(jī)科學(xué)中的兩個(gè)基本概念:分布式計(jì)算系統(tǒng)和并行計(jì)算。分布式計(jì)算系統(tǒng)是一系列由網(wǎng)絡(luò)連接的計(jì)算引擎,它們完成一個(gè)共同目標(biāo):運(yùn)行一個(gè)作業(yè)或者一個(gè)應(yīng)用。計(jì)算機(jī)集群或工作站網(wǎng)絡(luò)就是分布式計(jì)算系統(tǒng)的一個(gè)實(shí)例。并行計(jì)算是同時(shí)運(yùn)用多個(gè)計(jì)算引擎(并不一定需要網(wǎng)絡(luò)連接)來(lái)運(yùn)行一個(gè)作業(yè)或者一個(gè)應(yīng)用。
ComputerSchool,NUDT.Spring,201319并行計(jì)算和編程范式由多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)或者工作機(jī)組成用并行或分布式方式來(lái)運(yùn)行并行程序,該系統(tǒng)包括以下方面:1.分區(qū):分區(qū)適用于計(jì)算和數(shù)據(jù)兩方面:計(jì)算分區(qū):計(jì)算分區(qū)是把一個(gè)給定的任務(wù)或者程序分割成多個(gè)小任務(wù)。分區(qū)過(guò)程很大程度上依靠正確識(shí)別可以并發(fā)執(zhí)行的作業(yè)或程序的每一小部分。數(shù)據(jù)分區(qū):數(shù)據(jù)分區(qū)是把輸入或中間數(shù)據(jù)分割成更小的部分。類似地,一旦識(shí)別出輸入數(shù)據(jù)的并行性,它也可以被分割成多個(gè)部分,能在不同的工作機(jī)上運(yùn)行。數(shù)據(jù)塊可由程序的不同部分或者同一程序的副本來(lái)處理。ComputerSchool,NUDT.Spring,2013202.映射:映射是把更小的程序部分或者更小的數(shù)據(jù)分塊分配給底層的資源。這個(gè)過(guò)程的目的在于合理分配這些部分或者分塊,使它們能夠同時(shí)在不同的工作機(jī)上運(yùn)行。映射通常由系統(tǒng)中的資源分配器來(lái)處理。
3.同步:因?yàn)椴煌ぷ鳈C(jī)可以執(zhí)行不同的任務(wù),工作機(jī)之間的同步和協(xié)調(diào)就很有必要。這樣可以避免競(jìng)爭(zhēng)條件,不同工作機(jī)之間的數(shù)據(jù)依賴也能被恰當(dāng)?shù)毓芾?。不同工作機(jī)多路訪問(wèn)共享資源可能引起競(jìng)爭(zhēng)條件。然而,當(dāng)一個(gè)工作機(jī)需要其他工作機(jī)處理的數(shù)據(jù)時(shí)會(huì)產(chǎn)生數(shù)據(jù)依賴。ComputerSchool,NUDT.Spring,2013214.通信:因?yàn)閿?shù)據(jù)依賴是工作機(jī)之間通信的一個(gè)主要原因,當(dāng)中間數(shù)據(jù)準(zhǔn)備好在工作機(jī)之間傳送時(shí),通信通常就開始了。
5.調(diào)度:對(duì)于一項(xiàng)作業(yè)或一個(gè)程序,當(dāng)計(jì)算部分(任務(wù))或數(shù)據(jù)塊的數(shù)量多于可用的工作機(jī)數(shù)量時(shí),調(diào)度程序就會(huì)選擇一個(gè)任務(wù)或數(shù)據(jù)塊的序列來(lái)分配給工作機(jī)。值得注意的是,資源分配器完成計(jì)算或數(shù)據(jù)塊到工作機(jī)的實(shí)際映射,而調(diào)度器只是基于一套稱為調(diào)度策略的規(guī)則,來(lái)從沒(méi)有分配的任務(wù)隊(duì)列中選擇下一個(gè)任務(wù)。對(duì)于多作業(yè)或多程序,調(diào)度器會(huì)選擇運(yùn)行在分布式計(jì)算系統(tǒng)上的一個(gè)任務(wù)或程序的序列。ComputerSchool,NUDT.Spring,201322編程范式的動(dòng)機(jī)提供并行和分布式編程范式或模型來(lái)抽象用戶數(shù)據(jù)流的多個(gè)部分。編寫并行程序的簡(jiǎn)單性是度量并行和分布式編程范式的重要標(biāo)準(zhǔn)。并行和分布式編程模型背后的其他動(dòng)機(jī)還有:(1)提高程序員的生產(chǎn)效率,(2)減少程序進(jìn)入市場(chǎng)的時(shí)間,(3)更有效地利用底層資源,(4)提高系統(tǒng)的吞吐量,(5)支持更高層的抽象。MapReduce、Hadoop和Dryad是最近提出的三種并行和分布式編程模型。這些模型是為信息檢索應(yīng)用而開發(fā)的,不過(guò)已經(jīng)顯示出它們也適用于各種重要應(yīng)用ComputerSchool,NUDT.Spring,201323MapReduce、Twister和迭代MapReduceMapReduce是一個(gè)軟件框架,可以支持大規(guī)模數(shù)據(jù)集上的并行和分布式計(jì)算。這個(gè)軟件框架抽象化了在分布式計(jì)算系統(tǒng)上運(yùn)行一個(gè)并行程序的數(shù)據(jù)流,并以兩個(gè)函數(shù)的形式提供給用戶兩個(gè)接口:Map(映射)和Reduce(化簡(jiǎn))。用戶可以重載這兩個(gè)函數(shù)以實(shí)現(xiàn)交互和操縱運(yùn)行其程序的數(shù)據(jù)流。圖6-1說(shuō)明了在MapReduce框架中從Map到Reduce函數(shù)的邏輯數(shù)據(jù)流。在這個(gè)框架中,數(shù)據(jù)的‘value’345部分(key,value)是實(shí)際數(shù)據(jù),‘key’部分只是被MapReduce控制器使用來(lái)控制數(shù)據(jù)流。ComputerSchool,NUDT.Spring,201324圖6-1MapReduce框架:輸入數(shù)據(jù)流經(jīng)Map和Reduce函數(shù),在使用MapReduce軟件庫(kù)的控制流下產(chǎn)生輸出結(jié)果。使用特別的用戶接口來(lái)訪問(wèn)Map和Reduce資源ComputerSchool,NUDT.Spring,201325MapReduce的形式化定義
MapReduce軟件框架向用戶提供了一個(gè)具有數(shù)據(jù)流和控制流的抽象層,并隱藏了所有數(shù)據(jù)流實(shí)現(xiàn)的步驟,比如,數(shù)據(jù)分塊、映射、同步、通信和調(diào)度。這里,雖然在這樣的框架中數(shù)據(jù)流已被預(yù)定義,但抽象層還提供兩個(gè)定義完善的接口,這兩個(gè)接口的形式就是Map和Reduce這兩個(gè)函數(shù)。這兩個(gè)主函數(shù)能由用戶重載以達(dá)到特定目標(biāo)。ComputerSchool,NUDT.Spring,201326
用戶首先重載Map和Reduce函數(shù),然后從庫(kù)里調(diào)用提供的函數(shù)MapReduce(Spec,&Results)來(lái)開始數(shù)據(jù)流。MapReduce函數(shù)MapReduce(Spec,&Results)有一個(gè)重要的參數(shù),這個(gè)參數(shù)是一個(gè)規(guī)范對(duì)象‘Spec’。它首先在用戶的程序里初始化,然后用戶編寫代碼來(lái)填入輸入和輸出文件名,以及其他可選調(diào)節(jié)參數(shù)。這個(gè)對(duì)象還填入了Map和Reduce函數(shù)的名字,以識(shí)別這些用戶定義的函數(shù)和MapReduce庫(kù)里提供的函數(shù)。下面給出了用戶程序的整個(gè)結(jié)構(gòu),包括Map、Reduce和Main函數(shù)。Map和Reduce是兩個(gè)主要的子程序。它們被調(diào)用來(lái)實(shí)現(xiàn)在主程序中執(zhí)行的所需函數(shù)。ComputerSchool,NUDT.Spring,201327ComputerSchool,NUDT.Spring,201328(CourtesyofJeffreyDean,Google,2008)ComputerSchool,NUDT.Spring,201329ComputerSchool,NUDT.Spring,201330MapReduce邏輯數(shù)據(jù)流
Map和Reduce函數(shù)的輸入數(shù)據(jù)有特殊的結(jié)構(gòu)。輸出數(shù)據(jù)也一樣。Map函數(shù)的輸入數(shù)據(jù)是以(key,value)對(duì)的形式出現(xiàn)。例如,key是輸入文件的行偏移量,value是行內(nèi)容。Map函數(shù)的輸出數(shù)據(jù)的結(jié)構(gòu)類似于(key,value)對(duì),稱為中間(key,value)對(duì)。換句話說(shuō),用戶自定義的Map函數(shù)處理每個(gè)輸入的(key,value)對(duì),并產(chǎn)生很多(zero,one,ormore)中間(key,value)對(duì)。這里的目的是為Map函數(shù)并行處理所有輸入的(key,value)對(duì)ComputerSchool,NUDT.Spring,201331圖6-2在5個(gè)處理步驟中連續(xù)(key,value)對(duì)的MapReduce邏輯數(shù)據(jù)流ComputerSchool,NUDT.Spring,201332
反過(guò)來(lái),Reduce函數(shù)以中間值群組的形式接受中間(key,value)對(duì),這個(gè)中間值群組和一個(gè)中間key(key,[setofvalues])相關(guān)。實(shí)際上,MapReduce框架形成了這些群組,首先是對(duì)中間(key,value)對(duì)排序,然后以相同的key來(lái)把value分組。需要注意的是,數(shù)據(jù)的排序是為了簡(jiǎn)化分組過(guò)程。Reduce函數(shù)處理每個(gè)(key,[setofvalues])群組,并產(chǎn)生(key,value)對(duì)集合作為輸出。ComputerSchool,NUDT.Spring,201333
著名的MapReduce問(wèn)題——被稱為“單詞計(jì)數(shù)”(wordcount),是用來(lái)計(jì)算一批文檔中每一個(gè)單詞出現(xiàn)的次數(shù)。圖6-3說(shuō)明了一個(gè)簡(jiǎn)單輸入文檔的“單詞計(jì)數(shù)”問(wèn)題的數(shù)據(jù)流,這個(gè)文件只包含如下兩行:(1)“mostpeopleignoremostpoetry”,(2)“mostpoetryignoresmostpeople”。在這個(gè)例子里,Map函數(shù)同時(shí)為每一行內(nèi)容產(chǎn)生若干個(gè)中間(key,value)對(duì),所以每個(gè)單詞都用帶“1”的中間鍵值作為其中間值,如(ignore,1)。然后,MapReduce庫(kù)收集所有產(chǎn)生的中間(key,value)對(duì),進(jìn)行排序,然后把每個(gè)相同的單詞分組為多個(gè)“1”,如(people,[1,1])。然后把組并行送入Reduce函數(shù),所以就把每個(gè)單詞的“1”累加起來(lái),并產(chǎn)生文件中每個(gè)單詞出現(xiàn)的實(shí)際數(shù)目,例如(people,2)ComputerSchool,NUDT.Spring,201334圖6-3單詞計(jì)數(shù)問(wèn)題的數(shù)據(jù)流,以級(jí)聯(lián)操作方式使用MapReduce函數(shù)(Map,Sort,Group和Reduce)ComputerSchool,NUDT.Spring,201335MapReduce數(shù)據(jù)流的形式化符號(hào)ComputerSchool,NUDT.Spring,201336解決MapReduce問(wèn)題的策略將所有中間數(shù)據(jù)分組之后,出現(xiàn)相同key的value會(huì)排序并組合在一起。產(chǎn)生的結(jié)果是,分組之后所有中間數(shù)據(jù)中每一個(gè)key都是唯一的。所以尋找唯一的key是解決一個(gè)典型MapReduce問(wèn)題的出發(fā)點(diǎn)。然后,作為Map函數(shù)輸出的中間(key,value)對(duì)將會(huì)自動(dòng)找到。下面的三個(gè)例子解釋了如何在這些問(wèn)題中確定key和value:ComputerSchool,NUDT.Spring,201337問(wèn)題1:計(jì)算一批文檔中每個(gè)單詞的出現(xiàn)次數(shù)。解:唯一“key”——每個(gè)單詞;中間“value”——出現(xiàn)次數(shù)。問(wèn)題2:計(jì)算一批文檔中相同大小、相同字母數(shù)量的單詞的出現(xiàn)次數(shù)。解:唯一“key”——每個(gè)單詞;中間“value”——單詞大小。問(wèn)題3:計(jì)算一批文檔中變位詞(anagram)出現(xiàn)的次數(shù)。變位詞是指字母相同但是順序不同的單詞(例如,單詞“l(fā)isten”和“silent”)。解:唯一“key”——每個(gè)單詞中按照字母順序排列的字母(如“eilnst”);中間“value”——出現(xiàn)次數(shù)。ComputerSchool,NUDT.Spring,201338MapReduce真實(shí)數(shù)據(jù)和控制流1.數(shù)據(jù)分區(qū):MapReduce庫(kù)將已存入GFS的輸入數(shù)據(jù)(文件)分割成M部分,M也即映射任務(wù)的數(shù)量。2.計(jì)算分區(qū):計(jì)算分塊通過(guò)強(qiáng)迫用戶以Map和Reduce函數(shù)的形式編寫程序,(在MapReduce框架中)被隱式地處理。所以,MapReduce庫(kù)只生成用戶程序的多個(gè)復(fù)制(例如,通過(guò)fork系統(tǒng)調(diào)用),它們包含了Map和Reduce函數(shù),然后在多個(gè)可用的計(jì)算引擎上分配并啟動(dòng)它們。ComputerSchool,NUDT.Spring,2013393.決定主服務(wù)器(master)和服務(wù)器(worker):MapReduce體系結(jié)構(gòu)是基于主服務(wù)器-服務(wù)器模式的。所以一個(gè)用戶程序的復(fù)制變成了主服務(wù)器,其他則是服務(wù)器。主服務(wù)器挑選空閑的服務(wù)器,并分配Map和Reduce任務(wù)給它們。典型地,一個(gè)映射/化簡(jiǎn)服務(wù)器是一個(gè)計(jì)算引擎,例如集群節(jié)點(diǎn),通過(guò)執(zhí)行Map/Reduce函數(shù)來(lái)運(yùn)行映射/化簡(jiǎn)任務(wù)。步驟4~7描述了映射服務(wù)器。4.讀取輸入數(shù)據(jù)(數(shù)據(jù)分發(fā)):每一個(gè)映射服務(wù)器讀取其輸入數(shù)據(jù)的相應(yīng)部分,即輸入數(shù)據(jù)分割,然后輸入至其Map函數(shù)。雖然一個(gè)映射服務(wù)器可能運(yùn)行多個(gè)Map函數(shù),這意味著它分到了不止一個(gè)輸入數(shù)據(jù)分割;通常每個(gè)服務(wù)器只分到一個(gè)輸入分割。ComputerSchool,NUDT.Spring,2013405.Map函數(shù):每個(gè)Map函數(shù)以(key,value)對(duì)集合的形式收到輸入數(shù)據(jù)分割,來(lái)處理并產(chǎn)生中間(key,value)對(duì)。6.Combiner函數(shù):Combiner函數(shù)是映射服務(wù)器中一個(gè)可選的本地函數(shù),適用于中間(key,value)對(duì)。用戶可以在用戶程序里調(diào)用Combiner函數(shù)。Combiner函數(shù)運(yùn)行用戶為Reduce函數(shù)所寫的相同代碼,因?yàn)樗鼈兊墓δ苁且粯拥摹ombiner函數(shù)合并每個(gè)映射服務(wù)器的本地?cái)?shù)據(jù),然后送到網(wǎng)絡(luò)傳輸,以有效減少通信成本。正如我們?cè)谶壿嫈?shù)據(jù)流的討論中提到的,MapReduce框架對(duì)數(shù)據(jù)進(jìn)行排序并分組,然后數(shù)據(jù)被Reduce函數(shù)處理。類似地,如果用戶調(diào)用Combiner函數(shù),MapReduce框架也會(huì)對(duì)每個(gè)映射服務(wù)器的本地?cái)?shù)據(jù)排序并分組。ComputerSchool,NUDT.Spring,2013417.Partitioning函數(shù):正如在MapReduce數(shù)據(jù)流中提到的,具有相同鍵值的中間(key,value)對(duì)被分組到一起,因?yàn)槊總€(gè)組里的所有值都應(yīng)只由一個(gè)Reduce函數(shù)來(lái)處理產(chǎn)生最終結(jié)果。然而在實(shí)際實(shí)現(xiàn)中,由于有M個(gè)map和R個(gè)化簡(jiǎn)任務(wù),有相同key的中間(key,value)對(duì)可由不同的映射任務(wù)產(chǎn)生,盡管它們只應(yīng)由一個(gè)Reduce函數(shù)來(lái)一起分組并處理。由每一個(gè)映射服務(wù)器產(chǎn)生的中間(key,value)對(duì)被分成R個(gè)區(qū)域,這和化簡(jiǎn)任務(wù)的數(shù)量相同。分塊是由Partitioning(分區(qū))函數(shù)完成,并能保證有相同鍵值的所有(key,value)對(duì)都能存儲(chǔ)在同一區(qū)域內(nèi)。因此,由于化簡(jiǎn)服務(wù)器i讀取所有映射服務(wù)器區(qū)域i中的數(shù)據(jù),有相同key的所有(key,value)對(duì)將由相應(yīng)的化簡(jiǎn)服務(wù)器i收集。ComputerSchool,NUDT.Spring,201342圖6-4使用MapReducePartitioning函數(shù)把映射和化簡(jiǎn)服務(wù)器鏈接起來(lái)ComputerSchool,NUDT.Spring,201343圖6-5映射服務(wù)器和化簡(jiǎn)服務(wù)器的許多函數(shù)的數(shù)據(jù)流實(shí)現(xiàn),通過(guò)分區(qū)、匯總、同步和通信、排序和分組,以及化簡(jiǎn)操作的多個(gè)序列ComputerSchool,NUDT.Spring,2013448.同步:MapReduce使用簡(jiǎn)單的同步策略來(lái)協(xié)調(diào)映射服務(wù)器和化簡(jiǎn)服務(wù)器,當(dāng)所有映射任務(wù)完成時(shí),它們之間的通信就開始了。9.通信:Reduce服務(wù)器i已經(jīng)知道所有映射服務(wù)器的區(qū)域i的位置,使用遠(yuǎn)程過(guò)程調(diào)用來(lái)從所有映射服務(wù)器的各個(gè)區(qū)域中讀取數(shù)據(jù)。由于所有化簡(jiǎn)服務(wù)器從所有映射服務(wù)器中讀取數(shù)據(jù),映射和化簡(jiǎn)服務(wù)器之間的多對(duì)多通信在網(wǎng)絡(luò)中進(jìn)行,會(huì)引發(fā)網(wǎng)絡(luò)擁塞。這個(gè)問(wèn)題是提高此類系統(tǒng)性能的一個(gè)主要瓶頸。ComputerSchool,NUDT.Spring,20134510.排序和分組:當(dāng)化簡(jiǎn)服務(wù)器完成讀取輸入數(shù)據(jù)的過(guò)程時(shí),數(shù)據(jù)首先在化簡(jiǎn)服務(wù)器的本地磁盤中緩沖。然后化簡(jiǎn)服務(wù)器根據(jù)key將數(shù)據(jù)排序來(lái)對(duì)中間(key,value)對(duì)進(jìn)行分組,之后對(duì)出現(xiàn)的所有相同key進(jìn)行分組。注意,緩沖數(shù)據(jù)已經(jīng)排序并分組,因?yàn)橐粋€(gè)映射服務(wù)器產(chǎn)生的唯一key的數(shù)量可能會(huì)多于R個(gè)區(qū)域,所以在每個(gè)映射服務(wù)器區(qū)域中可能有不止一個(gè)key。11.Reduce函數(shù):化簡(jiǎn)服務(wù)器在已分組的(key,value)對(duì)上進(jìn)行迭代。對(duì)于每一個(gè)唯一的key,它把key和對(duì)應(yīng)的value發(fā)送給Reduce函數(shù)。然后,這個(gè)函數(shù)處理輸入數(shù)據(jù),并將最后輸出結(jié)果存入用戶程序已經(jīng)指定的文件中。ComputerSchool,NUDT.Spring,201346圖6-6在映射服務(wù)器和化簡(jiǎn)服務(wù)器(運(yùn)行用戶程序)中MapReduce功能的控制流實(shí)現(xiàn),在主服務(wù)器用戶程序的控制下從輸入文件到輸出文件ComputerSchool,NUDT.Spring,201347計(jì)算-數(shù)據(jù)密切度MapReduce軟件框架最早是由谷歌提出并實(shí)現(xiàn)的。首次實(shí)現(xiàn)是用C語(yǔ)言編碼的。該實(shí)現(xiàn)是將谷歌文件系統(tǒng)(GFS)的優(yōu)勢(shì)作為最底層。MapReduce可以完全適用于GFS。GFS是一個(gè)分布式文件系統(tǒng),其中文件被分成固定大小的塊,這些塊被分發(fā)并存儲(chǔ)在集群節(jié)點(diǎn)上。如前所述,MapReduce庫(kù)將輸入數(shù)據(jù)(文件)分割成固定大小的塊,理想狀態(tài)下是在每個(gè)塊上并行地執(zhí)行Map函數(shù)。在這種情況下,由于GFS已經(jīng)將文件保存成多個(gè)塊,MapReduce框架只需要將包含Map函數(shù)的用戶程序復(fù)制發(fā)給已經(jīng)存有數(shù)據(jù)塊的節(jié)點(diǎn)。這就是將計(jì)算發(fā)向數(shù)據(jù),而不是將數(shù)據(jù)發(fā)給計(jì)算。注意,GFS塊默認(rèn)為64MB,這和MapReduce框架是相同的。ComputerSchool,NUDT.Spring,201348Twister和迭代MapReduce
并行開銷的兩個(gè)主要來(lái)源是負(fù)載不均衡和通信在所有“經(jīng)典并行的”松散同步應(yīng)用中可以看到同樣的現(xiàn)象,典型地需要在計(jì)算階段加入一個(gè)迭代結(jié)構(gòu),然后是通信階段??梢酝ㄟ^(guò)兩個(gè)重要的改變來(lái)解決性能問(wèn)題:
1.在各個(gè)步驟之間的流信息,不把中間結(jié)果寫入磁盤。
2.使用長(zhǎng)期運(yùn)行的線程或進(jìn)程與δ(在迭代之間)流進(jìn)行通信。這些改變將會(huì)導(dǎo)致重大的性能提升,代價(jià)是較差的容錯(cuò)能力,同時(shí)更容易支持動(dòng)態(tài)改變,如可用節(jié)點(diǎn)的數(shù)量。這個(gè)概念已經(jīng)在多個(gè)項(xiàng)目中應(yīng)用ComputerSchool,NUDT.Spring,201349圖6-7Twister:一個(gè)迭代的MapReduce編程范式,用于重復(fù)的MapReduce運(yùn)行ComputerSchool,NUDT.Spring,201350圖6-8在MPI、Twister、Hadoop和DryaLINQ上K均值集群化的性能ComputerSchool,NUDT.Spring,201351圖6-9運(yùn)行時(shí)并行編程范式的線程和處理結(jié)構(gòu)例6.1在MPI、Twister、Hadoop和DryaLINQ上的K均值集群化的性能ComputerSchool,NUDT.Spring,201352例6.2在ClubWeb數(shù)據(jù)集上用256處理器核時(shí)Hadoop和Twister的性能圖6-10在ClueWeb數(shù)據(jù)集上使用256處理核時(shí),Hadoop和Twister性能ComputerSchool,NUDT.Spring,201353來(lái)自Apache的Hadoop軟件庫(kù)
Hadoop是Apache用Java(而不是C)編碼和發(fā)布的MapReduce開源實(shí)現(xiàn)。MapReduce的Hadoop實(shí)現(xiàn)使用Hadoop分布式文件系統(tǒng)(HadoopDistributedFileSystem,HDFS)作為底層,而不是GFS。Hadoop內(nèi)核分為兩個(gè)基本層:MapReduce引擎和HDFS。MapReduce引擎是運(yùn)行在HDFS之上的計(jì)算引擎,使用HDFS作為它的數(shù)據(jù)存儲(chǔ)管理器。
HDFS:HDFS是一個(gè)源于GFS的分布式文件系統(tǒng),是在一個(gè)分布式計(jì)算系統(tǒng)上管理文件和存儲(chǔ)數(shù)據(jù)。ComputerSchool,NUDT.Spring,201354HDFS體系結(jié)構(gòu):HDFS有一個(gè)主從體系結(jié)構(gòu),包括一個(gè)單個(gè)NameNode作為master以及多個(gè)DataNodes作為工作機(jī)(slave)。為了在這個(gè)體系結(jié)構(gòu)中存儲(chǔ)文件,HDFS將文件分割成固定大小的塊(例如64MB),并將這些塊存到工作機(jī)(DataNodes)中。從塊到DataNodes的映射是由NameNode決定的。NameNode(master)也管理文件系統(tǒng)的元數(shù)據(jù)和命名空間。在這個(gè)系統(tǒng)中,命名空間是維護(hù)元數(shù)據(jù)的區(qū)域,而元數(shù)據(jù)是指一個(gè)文件系統(tǒng)存儲(chǔ)的所有信息,它們是所有文件的全面管理所需要的。例如,元數(shù)據(jù)中的NameNode存儲(chǔ)了所有DataNodes上關(guān)于輸入塊位置的所有信息。每個(gè)DataNode,通常是集群中每個(gè)節(jié)點(diǎn)一個(gè),管理這個(gè)節(jié)點(diǎn)上的存儲(chǔ)。每個(gè)DataNode負(fù)責(zé)它的文件塊的存儲(chǔ)和檢索ComputerSchool,NUDT.Spring,201355HDFS特性:分布式文件系統(tǒng)為了能高效地運(yùn)作,會(huì)有一些特殊的需求,比如性能、可擴(kuò)展性、并發(fā)控制、容錯(cuò)能力和安全需求[62]。然而,因?yàn)镠DFS不是一個(gè)通用的文件系統(tǒng),即它僅執(zhí)行特殊種類的應(yīng)用,所以它不需要一個(gè)通用分布式文件系統(tǒng)的所有需求。例如,HDFS系統(tǒng)從不支持安全性。下面的討論著重突出HDFS區(qū)別于其他一般分布式文件系統(tǒng)的兩個(gè)重要特征。
HDFS容錯(cuò)能力:HDFS的一個(gè)主要方面就是容錯(cuò)特征。由于Hadoop設(shè)計(jì)時(shí)默認(rèn)部署在廉價(jià)的硬件上,系統(tǒng)硬件故障是很常見(jiàn)的。所以,Hadoop考慮以下幾個(gè)問(wèn)題來(lái)達(dá)到文件系統(tǒng)的可靠性要求:ComputerSchool,NUDT.Spring,201356
塊復(fù)制:為了能在HDFS上可靠地存儲(chǔ)數(shù)據(jù),在這個(gè)系統(tǒng)中文件塊被復(fù)制了。換句話說(shuō),HDFS把文件存儲(chǔ)為一個(gè)塊集,每個(gè)塊都有備份并在整個(gè)集群上分發(fā)。備份布置:備份的布置是HDFS實(shí)現(xiàn)所需要的容錯(cuò)功能的另一個(gè)因素。雖然在整個(gè)集群的不同機(jī)架的不同節(jié)點(diǎn)上(DataNodes),存儲(chǔ)備份提供了更大的可靠性,但這有時(shí)會(huì)被忽略,因?yàn)椴煌瑱C(jī)架上兩個(gè)節(jié)點(diǎn)之間的通信成本要比同一個(gè)機(jī)架上兩個(gè)不同節(jié)點(diǎn)之間的通信相對(duì)要高。
Heartbeat和Blockreport消息:Heartbeats和Blockreports是在一個(gè)集群中由每個(gè)DataNode傳給NameNode的周期性消息。收到Heartbeat意味著DataNode正運(yùn)行正常,而每個(gè)Blockreport包括了DataNode上所有塊的一個(gè)清單。ComputerSchool,NUDT.Spring,201357HDFS高吞吐量訪問(wèn)大規(guī)模數(shù)據(jù)集(文件):因?yàn)镠DFS主要是為批處理設(shè)計(jì)的,而不是交互式處理,所以HDFS數(shù)據(jù)訪問(wèn)吞吐量比延時(shí)來(lái)的更為重要。
HDFS操作:HDFS操作(比如讀和寫)的控制流能正確突出在管理操作中NameNode和DataNodes的角色。讀取文件:為了在HDFS中讀取文件,用戶先發(fā)送一個(gè)“open”請(qǐng)求給NameNode以獲取文件塊的位置信息。寫入文件:為了在HDFS中寫入文件,用戶發(fā)送一個(gè)“create”請(qǐng)求給NameNode,來(lái)在文件系統(tǒng)命名空間里創(chuàng)建一個(gè)新的文件。ComputerSchool,NUDT.Spring,201358Hadoop上的MapReduce體系結(jié)構(gòu)
Hadoop的頂層是MapReduce引擎,管理著分布式計(jì)算系統(tǒng)上MapReduce作業(yè)的數(shù)據(jù)流和控制流。類似于HDFS,MapReduce引擎也有一個(gè)主/從(master/slave)體系結(jié)構(gòu),由一個(gè)單獨(dú)的JobTracker作為主服務(wù)器并由許多的TaskTracker作為服務(wù)器(slaves)。JobTracker在一個(gè)集群上管理MapReduce作業(yè),并負(fù)責(zé)監(jiān)視作業(yè)和分配任務(wù)給TaskTracker。TaskTracker管理著集群上單個(gè)計(jì)算節(jié)點(diǎn)的映射和化簡(jiǎn)任務(wù)的執(zhí)行。ComputerSchool,NUDT.Spring,201359圖6-11Hadoop上的HDFS和MapReduce引擎體系結(jié)構(gòu),不同陰影的盒子表示應(yīng)用不同數(shù)據(jù)塊的不同功能節(jié)點(diǎn)ComputerSchool,NUDT.Spring,201360
每個(gè)TaskTracker節(jié)點(diǎn)都有許多同時(shí)運(yùn)行槽,每個(gè)運(yùn)行是映射任務(wù)或者化簡(jiǎn)任務(wù)。插槽是由TaskTracker節(jié)點(diǎn)的CPU支持同時(shí)運(yùn)行的線程數(shù)量來(lái)確定的。比如,一個(gè)帶有N個(gè)CPU的TaskTracker節(jié)點(diǎn),每個(gè)都支持M個(gè)線程,共有M×N個(gè)同時(shí)運(yùn)行的槽。需要注意的是,每個(gè)數(shù)據(jù)塊都是由運(yùn)行在單獨(dú)的一個(gè)槽上的映射任務(wù)處理的。所以,在TaskTracker上的映射任務(wù)和在各個(gè)DataNode上的數(shù)據(jù)塊之間存在一一對(duì)應(yīng)關(guān)系。ComputerSchool,NUDT.Spring,201361在Hadoop里運(yùn)行一個(gè)作業(yè)在這個(gè)系統(tǒng)中有三個(gè)部分共同完成一個(gè)作業(yè)的運(yùn)行:用戶節(jié)點(diǎn)、JobTracker和數(shù)個(gè)TaskTracker。數(shù)據(jù)流最初是在運(yùn)行于用戶節(jié)點(diǎn)上的用戶程序中調(diào)用runJob(conf)函數(shù),其中conf是MapReduce框架和HDFS中一個(gè)對(duì)象,它包含了一些調(diào)節(jié)參數(shù)。runJob(conf)函數(shù)和conf如同谷歌MapReduce第一次實(shí)現(xiàn)中的MapReduce(Spec,&Results)函數(shù)和Spec。圖6-12描述了在Hadoop上運(yùn)行一個(gè)MapReduce作業(yè)的數(shù)據(jù)流ComputerSchool,NUDT.Spring,201362圖6-12在不同的TaskTracker上使用Hadoop庫(kù)運(yùn)行一個(gè)MapReduce作業(yè)的數(shù)據(jù)流ComputerSchool,NUDT.Spring,201363
作業(yè)提交:每個(gè)作業(yè)都是由用戶節(jié)點(diǎn)通過(guò)以下步驟提交給JobTracker節(jié)點(diǎn),此節(jié)點(diǎn)可能會(huì)位于集群內(nèi)一個(gè)不同的節(jié)點(diǎn)上:一個(gè)用戶節(jié)點(diǎn)從JobTracker請(qǐng)求一個(gè)新的作業(yè)ID,并計(jì)算輸入文件分塊。用戶節(jié)點(diǎn)復(fù)制一些資源,比如用戶的JAR文件、配置文件和計(jì)算輸入分塊,至JobTracker文件系統(tǒng)。用戶節(jié)點(diǎn)通過(guò)調(diào)用submitJob()函數(shù)提交任務(wù)至JobTracker。任務(wù)分配:JobTracker為用戶節(jié)點(diǎn)的每個(gè)計(jì)算輸入塊建立一個(gè)映射任務(wù),并分配給TaskTracker的執(zhí)行槽。當(dāng)分配映射任務(wù)給TaskTracker時(shí),JobTracker會(huì)考慮數(shù)據(jù)的定位。JobTracker也會(huì)創(chuàng)建化簡(jiǎn)任務(wù),并分配給TaskTracker。ComputerSchool,NUDT.Spring,201364
任務(wù)執(zhí)行:把作業(yè)JAR文件復(fù)制到其文件系統(tǒng)之后,在TaskTracker執(zhí)行一個(gè)任務(wù)(不管映射還是化簡(jiǎn))的控制流就開始了。在啟動(dòng)Java虛擬機(jī)(JavaVirtualMachine,JVM)來(lái)運(yùn)行它的映射或化簡(jiǎn)任務(wù)后,就開始執(zhí)行作業(yè)JAR文件里的指令。任務(wù)運(yùn)行校驗(yàn):通過(guò)接收從TaskTracker到JobTracker的周期性心跳監(jiān)聽消息來(lái)完成任務(wù)運(yùn)行校驗(yàn)。每個(gè)心跳監(jiān)聽會(huì)告知JobTracker傳送中的TaskTracker是可用的,以及傳送中的TaskTracker是否準(zhǔn)備好運(yùn)行一個(gè)新的任務(wù)。ComputerSchool,NUDT.Spring,201365微軟的Dryad和DryadLINQDryad:Dryad比MapReduce更具靈活性,因?yàn)镈ryad應(yīng)用程序的數(shù)據(jù)流并非被動(dòng)或事先決定,并且用戶可以很容易地定義。為了達(dá)到這樣的靈活性,一個(gè)Dryad程序或者作業(yè)由一個(gè)有向無(wú)環(huán)圖(DAG)定義,其頂點(diǎn)是計(jì)算引擎,邊是頂點(diǎn)之間的通信信道。所以,用戶或者應(yīng)用開發(fā)者在作業(yè)中能方便地指定任意DAG來(lái)指定數(shù)據(jù)流。對(duì)于給定的DAG,Dryad分配計(jì)算頂點(diǎn)給底層的計(jì)算引擎(集群節(jié)點(diǎn)),并控制邊(集群結(jié)點(diǎn)之間的通信)的數(shù)據(jù)流。數(shù)據(jù)分塊、調(diào)度、映射、同步、通信和容錯(cuò)是主要的實(shí)現(xiàn)細(xì)節(jié),這些被Dryad隱藏以助于其編程環(huán)境。ComputerSchool,NUDT.Spring,201366圖6-13Dryad體系結(jié)構(gòu)及其作業(yè)結(jié)構(gòu)、控制和數(shù)據(jù)流ComputerSchool,NUDT.Spring,201367
在Dryad中,分布式作業(yè)是一個(gè)有向無(wú)環(huán)圖,每個(gè)頂點(diǎn)就是一個(gè)程序,邊表示數(shù)據(jù)信道。所以,整個(gè)作業(yè)將首先由應(yīng)用程序員構(gòu)建,并定義了處理規(guī)程以及數(shù)據(jù)流。這個(gè)邏輯計(jì)算圖將由Dryad運(yùn)行時(shí)自動(dòng)映射到物理節(jié)點(diǎn)。一個(gè)Dryad作業(yè)由作業(yè)管理器控制,作業(yè)管理器負(fù)責(zé)把程序部署到集群中的多個(gè)節(jié)點(diǎn)上。它可以在計(jì)算集群上運(yùn)行,也可以作為用戶工作站上的一個(gè)可訪問(wèn)集群的進(jìn)程。作業(yè)管理器有構(gòu)建DAG和庫(kù)的代碼,來(lái)調(diào)度在可用資源上運(yùn)行的工作。數(shù)據(jù)傳輸是通過(guò)信道完成,并沒(méi)有涉及作業(yè)管理器。所以作業(yè)管理器應(yīng)該不會(huì)成為性能的瓶頸??偠灾鳂I(yè)管理器:1使用由用戶提供的專用程序來(lái)構(gòu)建作業(yè)通信圖(數(shù)據(jù)流圖)。2從名字服務(wù)器上收集把數(shù)據(jù)流圖映射到底層資源(計(jì)算引擎)所需的信息。ComputerSchool,NUDT.Spring,201368
集群有一個(gè)名字服務(wù)器,用來(lái)枚舉集群上所有可用的計(jì)算資源。所以,作業(yè)管理器就能和名字服務(wù)器聯(lián)系,以得到整個(gè)集群的拓?fù)洳⒅朴喺{(diào)度決策。有一個(gè)處理后臺(tái)程序運(yùn)行在集群的每一個(gè)計(jì)算節(jié)點(diǎn)上。該程序的二進(jìn)制文件將直接由作業(yè)管理器發(fā)送至相應(yīng)的處理節(jié)點(diǎn)。后臺(tái)程序會(huì)被視為代理人,以便作業(yè)管理器能和遠(yuǎn)程頂點(diǎn)進(jìn)行通信,并能監(jiān)視計(jì)算的狀態(tài)。通過(guò)收集這些信息,名字服務(wù)器能夠提供給作業(yè)管理器底層資源和網(wǎng)絡(luò)拓?fù)涞耐昝酪晥D。所以作業(yè)管理器能夠:1.把數(shù)據(jù)流圖映射到底層資源。2在各自的資源上調(diào)度所有必要的通信和同步。ComputerSchool,NUDT.Spring,201369
當(dāng)映射數(shù)據(jù)流圖到底層資源時(shí),它也考慮數(shù)據(jù)和計(jì)算的位置。當(dāng)數(shù)據(jù)流圖映射到一系列計(jì)算引擎上時(shí),一個(gè)小的后臺(tái)程序在每個(gè)集群節(jié)點(diǎn)上運(yùn)行,以運(yùn)行分配的任務(wù)。每個(gè)任務(wù)是由用戶用一個(gè)專用程序定義的。在運(yùn)行時(shí)內(nèi),作業(yè)管理器和每個(gè)后臺(tái)程序通信,以監(jiān)視節(jié)點(diǎn)的計(jì)算狀態(tài)及其之前和以后節(jié)點(diǎn)的通信。在運(yùn)行時(shí),信道被用來(lái)傳輸代表處理程序的頂點(diǎn)之間的結(jié)構(gòu)化條目。
Dryad作業(yè)的執(zhí)行可以看做是二維分布式管道集。傳統(tǒng)的UNIX管道是一維管道,管道里的每個(gè)節(jié)點(diǎn)作為一個(gè)單獨(dú)的程序。Dryad的二維分布式管道系統(tǒng)在每個(gè)頂點(diǎn)上都有多個(gè)處理程序。通過(guò)這個(gè)方法,可以同時(shí)處理大規(guī)模數(shù)據(jù)。ComputerSchool,NUDT.Spring,201370
在二維管道執(zhí)行的時(shí)候,Dryad定義了關(guān)于動(dòng)態(tài)地構(gòu)造和更改DAG的很多操作。這些操作包括創(chuàng)建新的頂點(diǎn)、增加圖的邊、合并兩個(gè)圖,以及處理作業(yè)的輸入和輸出。Dryad也擁有內(nèi)置的容錯(cuò)機(jī)制。一般會(huì)有兩種故障:頂點(diǎn)故障和信道故障。它們的處理方式是不一樣的。因?yàn)橐粋€(gè)集群里有很多個(gè)節(jié)點(diǎn),作業(yè)管理器可以選擇另一個(gè)節(jié)點(diǎn)來(lái)重新執(zhí)行分配到故障節(jié)點(diǎn)上相應(yīng)的作業(yè)。如果是邊出現(xiàn)了故障,會(huì)重新執(zhí)行建立信道的頂點(diǎn),新的信道會(huì)重新建立并和相應(yīng)的節(jié)點(diǎn)再次建立連接。除了用來(lái)提高執(zhí)行性能的運(yùn)行時(shí)圖精煉外,Dryad還提供一些其他的機(jī)制。作為一個(gè)通用框架,Dryad能用在很多場(chǎng)合,包括腳本語(yǔ)言的支持、映射-化簡(jiǎn)編程和SQL服務(wù)集成。ComputerSchool,NUDT.Spring,201371微軟的DryadLINQDryadLINQ建立在微軟的Dryad執(zhí)行框架之上。Dryad能執(zhí)行非周期性任務(wù)調(diào)度,并能在大規(guī)模服務(wù)器上運(yùn)行。DryadLINQ的目標(biāo)是能夠讓普通的程序員使用大型分布式集群計(jì)算。事實(shí)上,正如其名,DryadLINQ連接了兩個(gè)重要的組件:Dryad分布式執(zhí)行引擎和NET語(yǔ)言綜合查詢(LanguageIntegratedQuery,LINQ)。使用DryadLINQ時(shí)執(zhí)行過(guò)程分為如下9個(gè)步驟:1.一個(gè).NET用戶應(yīng)用運(yùn)行和創(chuàng)建一個(gè)DryadLINQ表示對(duì)象。由于LINQ的延遲評(píng)估,表達(dá)式的真正執(zhí)行還沒(méi)有開始。2.應(yīng)用調(diào)用ToDryadTable觸發(fā)了一個(gè)數(shù)據(jù)并行的執(zhí)行。這個(gè)表達(dá)對(duì)象傳給了DryadLINQ。ComputerSchool,NUDT.Spring,201372圖6-14DryadLINQ上的LING表達(dá)式運(yùn)行ComputerSchool,NUDT.Spring,2013733.DryadLINQ編譯LINQ表達(dá)式到一個(gè)分布式Dryad執(zhí)行計(jì)劃。表達(dá)式分解成子表達(dá)式,每個(gè)都在單獨(dú)的Dryad頂點(diǎn)運(yùn)行。然后生成遠(yuǎn)端Dryad頂點(diǎn)的代碼和靜態(tài)數(shù)據(jù),接下來(lái)是所需要數(shù)據(jù)類型的序列化代碼。4.DryadLINQ調(diào)用一個(gè)自定義Dryad作業(yè)管理器,用來(lái)管理和監(jiān)視相應(yīng)任務(wù)的執(zhí)行流。5.作業(yè)管理器使用步驟3建立的計(jì)劃創(chuàng)建作業(yè)圖。當(dāng)資源可用的時(shí)候,它來(lái)調(diào)度和產(chǎn)生頂點(diǎn)。6.每個(gè)Dryad頂點(diǎn)執(zhí)行一個(gè)與頂點(diǎn)相關(guān)的程序。7.當(dāng)Dryad作業(yè)成功完成,它就將數(shù)據(jù)寫入輸出表格。8.作業(yè)管理器處理結(jié)束,它把控制返回給DryadLINQ。DryadLINQ創(chuàng)建一個(gè)封裝有執(zhí)行輸出的本地DryadTable對(duì)象。這里的DryadTable對(duì)象可能是下一個(gè)階段的輸入。9.控制返回給用戶應(yīng)用。DryadTable上的迭代接口允許用戶讀取其內(nèi)容作為.NET對(duì)象。ComputerSchool,NUDT.Spring,201374例6.4單詞計(jì)數(shù)問(wèn)題直方圖的執(zhí)行舉例ComputerSchool,NUDT.Spring,201375例6.5一個(gè)MapReduceWebVisCounter程序的Hadoop實(shí)現(xiàn)圖6-15WebVisCounter程序運(yùn)行的數(shù)據(jù)流ComputerSchool,NUDT.Spring,201376Sawzall和PigLatin高級(jí)語(yǔ)言
Sawzall是建立在谷歌的MapReduce框架之上的一種高級(jí)語(yǔ)言。Sawzall是一種腳本語(yǔ)言,能進(jìn)行并行數(shù)據(jù)處理。和MapReduce一樣,Sawzall能對(duì)大規(guī)模數(shù)據(jù)集,甚至對(duì)整個(gè)互聯(lián)網(wǎng)上收集的數(shù)據(jù)規(guī)模進(jìn)行分布式、容錯(cuò)處理。Sawzall最初的目標(biāo)是處理谷歌日志文件。首先,數(shù)據(jù)用現(xiàn)場(chǎng)處理腳本在本地被分塊和處理。本地?cái)?shù)據(jù)會(huì)被過(guò)濾,以得到必需的信息。然后,使用整合器根據(jù)已發(fā)送的數(shù)據(jù)來(lái)獲取最后的結(jié)果。用戶使用Sawzall腳本語(yǔ)言編寫其應(yīng)用。Sawzall運(yùn)行時(shí)引擎將相應(yīng)的腳本翻譯為能夠運(yùn)行在很多節(jié)點(diǎn)上的MapReduce程序。Sawzall程序能夠自動(dòng)利用集群計(jì)算的威力,也能夠從冗余服務(wù)器上獲取可靠性。ComputerSchool,NUDT.Spring,201377圖6-16Sawzall的過(guò)濾、整合和校對(duì)的整個(gè)流ComputerSchool,NUDT.Spring,201378PigLatin是雅虎開發(fā)的一種高級(jí)數(shù)據(jù)流語(yǔ)言.PigLatin、Sawzall和DryadLINQ是在MapReduce及其擴(kuò)展之上構(gòu)建語(yǔ)言的三種不同方法。
ComputerSchool,NUDT.Spring,201379ComputerSchool,NUDT.Spring,201380ComputerSchool,NUDT.Spring,201381ComputerSchool,NUDT.Spring,201382ComputerSchool,NUDT.Spring,2013836.3GAE的編程支持GAE編程圖6-17總結(jié)了對(duì)于兩種支持語(yǔ)言Java和Python,GAE編程環(huán)境的一些主要特性??蛻舳谁h(huán)境包括一個(gè)Java的Eclipse插件,允許你在本地機(jī)器上調(diào)試自己的GAE。對(duì)于JavaWeb應(yīng)用程序開發(fā)者來(lái)說(shuō),還有一個(gè)GWT(谷歌Web工具集)可用。開發(fā)者可以使用它,或其他任何借助于基于JVM的解釋器或編譯器的語(yǔ)言,如JavaScript或Ruby。Python會(huì)經(jīng)常和Django或者CherryPy之類的框架一起使用,但是谷歌也提供一個(gè)內(nèi)置的webappPython環(huán)境。ComputerSchool,NUDT.Spring,201384圖6-17GAE編程環(huán)境ComputerSchool,NUDT.Spring,201385
數(shù)據(jù)存儲(chǔ)是一個(gè)NOSQL數(shù)據(jù)管理系統(tǒng),實(shí)體的大小至多是1MB,由一組無(wú)模式的屬性來(lái)標(biāo)記。查詢能夠檢索一個(gè)給定類型的實(shí)體,這是根據(jù)屬性值來(lái)過(guò)濾和排序的。Java提供一個(gè)Java數(shù)據(jù)對(duì)象和JPA接口,是由開源DataNucleusAccess平臺(tái)來(lái)實(shí)現(xiàn),而Python有一個(gè)類似SQL的查詢語(yǔ)言稱為GQL。如果其他進(jìn)程試圖同時(shí)更新同一個(gè)實(shí)體,那么這個(gè)實(shí)體的更新是發(fā)生在一個(gè)事務(wù)處理中,并且重試固定的次數(shù)。數(shù)據(jù)存儲(chǔ)使用“實(shí)體群組”實(shí)現(xiàn)了貫穿其分布式網(wǎng)絡(luò)的事務(wù)。事務(wù)在單個(gè)群組中操作實(shí)體。這些同一群組的實(shí)體被存儲(chǔ)在一起。當(dāng)實(shí)體創(chuàng)建的時(shí)候,GAE應(yīng)用可以把實(shí)體分配給群組。ComputerSchool,NUDT.Spring,201386
谷歌安全數(shù)據(jù)連接能夠和互聯(lián)網(wǎng)建立隧道連通,并能將內(nèi)聯(lián)網(wǎng)和一個(gè)外部GAE應(yīng)用相連。URLFetch操作保障了應(yīng)用程序能夠使用HTTP和HTTPS請(qǐng)求獲取資源,并與互聯(lián)網(wǎng)上的其他主機(jī)進(jìn)行通信。有一個(gè)專門的郵件機(jī)制,從你的GAE應(yīng)用程序中發(fā)送電子郵件。應(yīng)用程序能夠使用GAEURL獲取服務(wù)訪問(wèn)互聯(lián)網(wǎng)上的資源,比如Web服務(wù)或者其他數(shù)據(jù)。URL獲取服務(wù)使用相同的高速谷歌基礎(chǔ)設(shè)施來(lái)檢索Web資源,這些谷歌基礎(chǔ)設(shè)施是為谷歌的很多其他產(chǎn)品來(lái)檢索網(wǎng)頁(yè)的。還有許多谷歌“企業(yè)”設(shè)施,包括地圖、網(wǎng)站、群組、日程、文檔和YouTube等。這些支持谷歌數(shù)據(jù)API,它能在GAE內(nèi)部使用。
ComputerSchool,NUDT.Spring,201387
一個(gè)應(yīng)用程序可以使用谷歌賬戶來(lái)進(jìn)行用戶認(rèn)證。谷歌賬戶處理用戶賬戶的創(chuàng)建和登錄,如果一個(gè)用戶已經(jīng)有了谷歌賬戶(如一個(gè)Gmail賬戶),他就能用這個(gè)賬戶來(lái)使用應(yīng)用程序。GAE使用一個(gè)專用的Images服務(wù)來(lái)處理圖片數(shù)據(jù),能夠調(diào)整大小、旋轉(zhuǎn)、翻轉(zhuǎn)、裁剪和增強(qiáng)圖片。一個(gè)應(yīng)用程序能夠不響應(yīng)Web服務(wù)來(lái)執(zhí)行任務(wù)。另外,應(yīng)用程序能執(zhí)行由應(yīng)用程序本身加入到一個(gè)隊(duì)列中的任務(wù),比如處理請(qǐng)求時(shí)創(chuàng)建的一個(gè)后臺(tái)任務(wù)。配置一個(gè)GAE應(yīng)用消耗的資源有一定上限或者固定限額。ComputerSchool,NUDT.Spring,201388谷歌文件系統(tǒng)(GFS)
GFS主要是為谷歌搜索引擎的基礎(chǔ)存儲(chǔ)服務(wù)建立的。因?yàn)榫W(wǎng)絡(luò)上抓取和保存的數(shù)據(jù)規(guī)模非常大,谷歌需要一個(gè)分布式文件系統(tǒng),在廉價(jià)、不可靠的計(jì)算機(jī)上存儲(chǔ)大量的冗余數(shù)據(jù)。沒(méi)有一個(gè)傳統(tǒng)的分布式文件系統(tǒng)能夠提供這樣的功能,并存儲(chǔ)如此大規(guī)模的數(shù)據(jù)。另外,GFS是為谷歌應(yīng)用程序設(shè)計(jì)的,并且谷歌應(yīng)用程序是為谷歌而建立。在傳統(tǒng)的文件系統(tǒng)設(shè)計(jì)中,這種觀念不會(huì)有吸引力,因?yàn)樵趹?yīng)用程序和文件系統(tǒng)之間應(yīng)該有一個(gè)清晰的接口,比如POSIX接口。
ComputerSchool,NUDT.Spring,201389
谷歌關(guān)于GFS的設(shè)計(jì)做出了一些特殊決策。如前所述,選擇64MB塊大小。使用復(fù)制來(lái)達(dá)到可靠性。單個(gè)主服務(wù)器可以協(xié)調(diào)訪問(wèn)以及保管元數(shù)據(jù)。這個(gè)決策簡(jiǎn)化了整個(gè)集群的設(shè)計(jì)和管理。開發(fā)者不需要考慮許多分布式系統(tǒng)中的難題。
GFS中沒(méi)有數(shù)據(jù)高速緩存,因?yàn)榇笠?guī)模流讀取和寫入既不代表時(shí)間也不代表空間的近鄰性。GFS提供了相似但不相同的POSIX文件系統(tǒng)訪問(wèn)接口。其中明顯的區(qū)別是應(yīng)用程序甚至能夠看到文件塊的物理位置。這樣的模式可以提高上層應(yīng)用程序。自定義API能夠簡(jiǎn)化問(wèn)題,并聚焦在谷歌應(yīng)用上。自定義API加入了快照和記錄附加操作,以利于建立谷歌應(yīng)用程序。ComputerSchool,NUDT.Spring,201390圖6-18GFS體系結(jié)構(gòu)ComputerSchool,NUDT.Spring,201391圖6-19GFS中的數(shù)據(jù)變異序列ComputerSchool,NUDT.Spring,201392GFS中的數(shù)據(jù)變異采用如下的步驟:1客戶端詢問(wèn)主機(jī)哪個(gè)塊服務(wù)器掌握了當(dāng)前發(fā)行版本的塊和其他副本的位置。如果沒(méi)有發(fā)行版本,那么主機(jī)授權(quán)給一個(gè)它挑選的副本(沒(méi)有顯示)。2主機(jī)回復(fù)了主版本的身份和其他(第二級(jí))副本的位置??蛻舳司彺孢@個(gè)數(shù)據(jù)以備將來(lái)的變異。只有當(dāng)主版本變的不可達(dá)或回復(fù)它不再擁有一個(gè)發(fā)行版時(shí),它才需要重新和主機(jī)聯(lián)系。3客戶端將數(shù)據(jù)推送給所有副本。客戶端可以按任意順序推送數(shù)據(jù)。每個(gè)塊服務(wù)器將數(shù)據(jù)存儲(chǔ)在一個(gè)內(nèi)部LRU緩存區(qū),直到數(shù)據(jù)被使用了或失效了。通過(guò)將數(shù)據(jù)流和控制流解耦合,對(duì)基于網(wǎng)絡(luò)拓?fù)涞母叽鷥r(jià)數(shù)據(jù)流進(jìn)行調(diào)度,我們就可以提高性能,而不用考慮哪個(gè)塊服務(wù)器是主要的。ComputerSchool,NUDT.Spring,2013934.一旦所有副本都確認(rèn)接收數(shù)據(jù),客戶端就將寫請(qǐng)求送至主要版本。該請(qǐng)求區(qū)分出之前送至所有副本的數(shù)據(jù)。主要版本分配連續(xù)序列號(hào)至它收到的所有變異。5.主要版本轉(zhuǎn)發(fā)寫請(qǐng)求到對(duì)所有二級(jí)副本。每個(gè)二級(jí)副本請(qǐng)求按照主要版本分配的相同序列號(hào)應(yīng)用變異。6.第二級(jí)都回復(fù)主要版本,來(lái)表明操作已經(jīng)完成了。7.主要版本回復(fù)客戶端。在任何副本遇到的任何錯(cuò)誤都會(huì)報(bào)告給客戶端。客戶端請(qǐng)求會(huì)被認(rèn)為失敗,改進(jìn)區(qū)域會(huì)停留在一個(gè)不一致的狀態(tài)。我們的客戶端代碼通過(guò)重試發(fā)生故障的變異來(lái)處理這樣的錯(cuò)誤。從返回重試最開始寫之前,會(huì)從第3步到第7步做一些嘗試。ComputerSchool,NUDT.Spring,201394GFS是為高容錯(cuò)設(shè)計(jì)的,并采納了一些方法來(lái)達(dá)到這個(gè)目標(biāo)。主機(jī)和塊服務(wù)器能夠在數(shù)秒之內(nèi)重啟,有了這么快的恢復(fù)能力,數(shù)據(jù)不可使用的時(shí)間窗口將大大減少。正如上文中提到的,每個(gè)塊至少在三個(gè)地方上備份,并且在一個(gè)數(shù)據(jù)塊上至少能夠容忍兩處數(shù)據(jù)崩潰。影子主機(jī)用來(lái)處理GFS主機(jī)的故障。對(duì)于數(shù)據(jù)完整性,GFS在每個(gè)塊上每64KB就進(jìn)行校驗(yàn)和。有了前面討論過(guò)的設(shè)計(jì)和實(shí)現(xiàn),GFS可以達(dá)到高可用性、高性能和大規(guī)模的目標(biāo)。GFS證明了如何在商業(yè)硬件上支持大規(guī)模處理負(fù)載,這些硬件被設(shè)計(jì)為可容忍頻繁的組件故障,并且為主要附加和讀取的大規(guī)模文件進(jìn)行了優(yōu)化。ComputerSchool,NUDT.Spring,201395BigTable——谷歌的NOSQL系統(tǒng)
BigTable提供了一個(gè)服務(wù),用來(lái)存儲(chǔ)和檢索結(jié)構(gòu)化與半結(jié)構(gòu)化的數(shù)據(jù)。BigTable應(yīng)用包括網(wǎng)頁(yè)、每個(gè)用戶數(shù)據(jù)和地理位置的存儲(chǔ)。使用商用數(shù)據(jù)庫(kù)系統(tǒng)來(lái)解決如此大規(guī)模結(jié)構(gòu)化或半結(jié)構(gòu)化的數(shù)據(jù)是不可能的。這是重建數(shù)據(jù)管理系統(tǒng)的一個(gè)原因;產(chǎn)生的系統(tǒng)可以以較低的增量成本應(yīng)用在很多項(xiàng)目中。重建數(shù)據(jù)管理系統(tǒng)的另一個(gè)動(dòng)機(jī)是性能。低級(jí)存儲(chǔ)優(yōu)化能顯著地提升性能,但如果運(yùn)行在傳統(tǒng)數(shù)據(jù)庫(kù)層之上,則會(huì)困難得多。ComputerSchool,NUDT.Spring,201396BigTable系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)有以下的目標(biāo)。應(yīng)用程序需要異步處理來(lái)連續(xù)更新不同的數(shù)據(jù)塊,并且需要在任意時(shí)間訪問(wèn)大部分的當(dāng)前數(shù)據(jù)。數(shù)據(jù)庫(kù)需要支持很高的讀/寫速率,規(guī)模是每秒數(shù)百萬(wàn)的操作。另外,數(shù)據(jù)庫(kù)還需要在所有或者感興趣的數(shù)據(jù)子集上支持高效掃描,以及大規(guī)模一對(duì)一和一對(duì)多的數(shù)據(jù)集的有效連接。
BigTable能夠看做是分布式多層映射。它像存儲(chǔ)服務(wù)一樣提供了容錯(cuò)能力和持續(xù)數(shù)據(jù)庫(kù)。
BigTable使用如下的構(gòu)建模塊:1.GFS:存儲(chǔ)持續(xù)狀態(tài)2.調(diào)度器:涉及BigTable服務(wù)的調(diào)度作業(yè)3.鎖服務(wù):主機(jī)選擇,開機(jī)引導(dǎo)程序定位4MapReduce:通常用來(lái)讀/寫B(tài)igTable數(shù)據(jù)ComputerSchool,NUDT.Spring,201397圖6-20BigTable數(shù)據(jù)模型和系統(tǒng)結(jié)構(gòu)ComputerSchool,NUDT.Spring,201398子表位置分層圖6-21描述了如何對(duì)從Chubby中存儲(chǔ)的文件開始的BigTable數(shù)據(jù)進(jìn)行定位。ComputerSchool,NUDT.Spring,201399Chubby——谷歌的分布式鎖服務(wù)
Chubby用來(lái)提供粗粒度鎖服務(wù)。它能在Chubby存儲(chǔ)中存儲(chǔ)小文件,這里提供了一個(gè)簡(jiǎn)單命名空間作為文件系統(tǒng)樹。和GFS中的大規(guī)模文件相比,存儲(chǔ)在Chubby上的文件是非常小的?;赑axos一致協(xié)議ComputerSchool,NUDT.Spring,20131006.4亞馬遜AWS與微軟Azure中的編程亞馬遜EC2上的編程亞馬遜是第一家引入應(yīng)用托管虛擬機(jī)的公司。用戶可以租借虛擬機(jī)而不是物理機(jī)器來(lái)運(yùn)行他們的應(yīng)用程序。通過(guò)使用虛擬機(jī),用戶可以自己選擇加載任意軟件。這類服務(wù)的彈性特點(diǎn)是用戶可以根據(jù)需要?jiǎng)?chuàng)建、啟動(dòng)和終止服務(wù)器實(shí)例,并且對(duì)活動(dòng)服務(wù)器按小時(shí)支付費(fèi)用。亞馬遜提供幾種類型的預(yù)裝虛擬機(jī)。實(shí)例通常稱為亞馬遜機(jī)器鏡像(AmazonMachineImage,AMI)。這些虛擬機(jī)預(yù)先配置了Linux或者Windows的操作系統(tǒng)和一些附加軟件。ComputerSchool,NUDT.Spring,2013101ComputerSchool,NUDT.Spring,2013102圖6-23亞馬遜EC2運(yùn)行環(huán)境ComputerSchool,NUDT.Spring,2013103ComputerSchool,NUDT.Spring,2013104ComputerSchool,NUDT.Spring,2013105圖6-24亞馬遜S3運(yùn)行環(huán)境TheAmazonWebService(AWS)PlatformComputerSchool,NUDT.Spring,2013107亞馬遜簡(jiǎn)單存儲(chǔ)服務(wù)(S3)亞馬遜S3提供一個(gè)簡(jiǎn)單Web服務(wù)接口,利用該接口可以在任意時(shí)間、任意地點(diǎn)通過(guò)Web存儲(chǔ)和檢索任意數(shù)據(jù)。S3為用戶提供面向?qū)ο蟮拇鎯?chǔ)服務(wù)。用戶可以通過(guò)帶有支持SOAP的瀏覽器或者其他客戶端程序的SOAP來(lái)訪問(wèn)他們的對(duì)象。對(duì)象是S3的基本操作單元。每個(gè)對(duì)象被存儲(chǔ)在桶里,通過(guò)唯一的開發(fā)者分配的鍵值來(lái)被檢索。也就是說(shuō),桶是對(duì)象的集裝器。除了唯一的鍵值屬性以外,對(duì)象還有數(shù)值、元數(shù)據(jù)和訪問(wèn)控制信息等其他屬性。從程序員的角度來(lái)看,S3的存儲(chǔ)可以被看做一個(gè)非常粗粒度的鍵-值對(duì)存儲(chǔ)。通過(guò)鍵-值編程接口,用戶可以讀、寫和刪除對(duì)象。用戶可以通過(guò)兩類Web服務(wù)接口訪問(wèn)亞馬遜云存儲(chǔ)的數(shù)據(jù)。ComputerSchool,NUDT.Spring,2013108亞馬遜彈性數(shù)據(jù)塊存儲(chǔ)服務(wù)(EBS)和SimpleDB
彈性塊存儲(chǔ)(EBS)提供卷塊接口用于存儲(chǔ)和恢復(fù)EC2實(shí)例的虛擬鏡像。在機(jī)器關(guān)閉后,EC2的狀態(tài)仍被保存在EBS系統(tǒng)中。用戶可以使用EBS保存永久性數(shù)據(jù)和安裝到EC2的運(yùn)行實(shí)例。S3是帶消息傳遞接口的“存儲(chǔ)即服務(wù)”。EBS類似于傳統(tǒng)的操作系統(tǒng)磁盤訪問(wèn)機(jī)制的分布式文件系統(tǒng)。在亞馬遜EBS卷上,用戶可以創(chuàng)建一個(gè)文件系統(tǒng),也可以按使用塊設(shè)備的其他任意方式來(lái)使用存儲(chǔ)卷。快照用來(lái)增量地保存數(shù)據(jù),利用快照可以提高數(shù)據(jù)存儲(chǔ)和恢復(fù)的性能。ComputerSchool,NUDT.Spring,2013109亞馬遜SimpleDB服務(wù)
SimpleDB基于關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)模型提供了一個(gè)簡(jiǎn)單數(shù)據(jù)模型。用戶的結(jié)構(gòu)化數(shù)據(jù)被組織到域中,每個(gè)域可以看做是一個(gè)表,條目(item)是表中的列,表中的單元格存放相應(yīng)行的具體屬性(列名)的值。這和關(guān)系數(shù)據(jù)庫(kù)很相似。不同的是,它可能分配多個(gè)值到表格中的一個(gè)單元。而在傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)中,為了保持?jǐn)?shù)據(jù)的一致性,這是不允許的。
SimpleDB放棄了維持強(qiáng)一致性數(shù)據(jù)庫(kù)模式的需求。
ComputerSchool,NUDT.Spring,2013110微軟Azure編程支持主要編程組件有客戶端開發(fā)環(huán)境、SQLAzure,以及海量存儲(chǔ)和編程子系統(tǒng)。擁有底層Azure框架,它包括虛擬化的硬件和復(fù)雜的控制環(huán)境,可以實(shí)現(xiàn)資源的動(dòng)態(tài)分配和容錯(cuò)。這實(shí)現(xiàn)了域名系統(tǒng)(DNS)和監(jiān)控功能。自動(dòng)服務(wù)管理允許用XML模板定義服務(wù)類型,還可以將多個(gè)服務(wù)復(fù)制按請(qǐng)求實(shí)例化。當(dāng)系統(tǒng)運(yùn)行時(shí),服務(wù)處于監(jiān)控狀態(tài),人們可以訪問(wèn)事件日志、跟蹤/調(diào)試數(shù)據(jù)、性能計(jì)數(shù)器、IISWeb服務(wù)日志、崩潰轉(zhuǎn)儲(chǔ)和其他日志文件。這些信息可以保存在Azure存儲(chǔ)器中。ComputerSchool,NUDT.Spring,2013111圖6-25Azure云計(jì)算平臺(tái)特征ComputerSchool,NUDT.Spring,2013112SQLAzureAzure提供一系列非常豐富的存儲(chǔ)功能。SQLAzure提供SQL服務(wù)器作為服務(wù)。除了最新引進(jìn)的驅(qū)動(dòng)外,其他所有存儲(chǔ)形式都用REST接口訪問(wèn)Azure表
Azure表和隊(duì)列存儲(chǔ)模式目標(biāo)是非常小的數(shù)據(jù)卷。隊(duì)列提供可靠的消息傳遞,很自然地用于支持Web和服務(wù)器角色之間的工作分配。
ComputerSchool,NUDT.Spring,20131136.5新興云軟件環(huán)境開源的Eucalyptus和NimbusEucalyptus是從加州大學(xué)圣巴巴拉分校一個(gè)研究項(xiàng)目開發(fā)出的一個(gè)產(chǎn)品。Eucalyptus最初旨在將云計(jì)算范式引入到學(xué)術(shù)上的超級(jí)計(jì)算機(jī)和集群。Eucalyptus提供了一個(gè)AWS兼容的基于EC2的Web服務(wù)接口,用來(lái)和云服務(wù)交互。另外,Eucalyptus也提供服務(wù),如AWS兼容的Walrus,以及一個(gè)用來(lái)管理用戶和鏡像的用戶接口。
Eucalyptus系統(tǒng)是一個(gè)開放的軟件環(huán)境。ComputerSchool,NUDT.Spring,2013114圖6-26用于虛擬機(jī)鏡像管理的Eucalyptus體系結(jié)構(gòu)ComputerSchool,NUDT.Spring,2013115虛擬機(jī)鏡像管理
Eucalyptus吸收了很多亞馬遜EC2的設(shè)計(jì)成果,且二者鏡像管理系統(tǒng)沒(méi)有什么不同。Eucalyptus在Walrus中存儲(chǔ)鏡像,其塊存儲(chǔ)系統(tǒng)類似于亞馬遜S3服務(wù)。這樣,任何用戶可以自己捆綁自己的根文件系統(tǒng),上傳然后注冊(cè)鏡像并把它和一個(gè)特定的內(nèi)核與虛擬硬盤鏡像連接起來(lái)。這個(gè)鏡像被上傳到Walrus內(nèi)由用戶自定義的桶中,并且可以在任何時(shí)間從任何可用區(qū)域中被檢索。這樣就允許用戶創(chuàng)建專門的虛擬工具,并且不費(fèi)力地用Eucalyptus來(lái)配置它們。ComputerSchool,NUDT.Spring,2013116NimbusNimbus是一套開源工具,一起提供一個(gè)IaaS云計(jì)算解決方案。通過(guò)在資源上部署虛擬機(jī)和配置它們表示用戶期望的環(huán)境。NimbusWeb以一個(gè)PythonDjangoWeb應(yīng)用為中心,其目的是部署時(shí)可以從Nimbus服務(wù)中完全分離出來(lái)。一個(gè)稱為Cumulus的存儲(chǔ)云實(shí)現(xiàn)已經(jīng)與其他中心服務(wù)緊密集成起來(lái)
Nimbus支持兩種資源管理策略。第一種是默認(rèn)的“資源池”模式。在這種模式中,服務(wù)直接控制虛擬機(jī)管理器節(jié)點(diǎn)池。另一個(gè)支持模式被稱為“飛行模式”。服務(wù)向集群的本地資源管理系統(tǒng)發(fā)出請(qǐng)求,以獲得一個(gè)可用的虛擬機(jī)管理器來(lái)配置虛擬機(jī)。ComputerSchool,NUDT.Sprin
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年【就業(yè)】上海市第一社會(huì)福利院招聘養(yǎng)老護(hù)理員備考題庫(kù)及參考答案詳解1套
- 2026年九江市專業(yè)森林消防支隊(duì)(九江市綜合應(yīng)急救援支隊(duì))招聘10人備考題庫(kù)完整答案詳解
- 2026年中鐵工程設(shè)計(jì)咨詢集團(tuán)有限公司社會(huì)招聘?jìng)淇碱}庫(kù)及答案詳解一套
- 2026年中交海峰風(fēng)電發(fā)展股份有限公司招聘?jìng)淇碱}庫(kù)帶答案詳解
- 2026年中國(guó)特種飛行器研究所招聘?jìng)淇碱}庫(kù)及一套完整答案詳解
- 2026年平果市協(xié)力初級(jí)中學(xué)教師招聘?jìng)淇碱}庫(kù)及參考答案詳解
- 2026年關(guān)于龍江縣第一人民醫(yī)院公開招聘編外醫(yī)生的備考題庫(kù)及參考答案詳解
- 2026年南海區(qū)大瀝鎮(zhèn)漖表小學(xué)臨聘教師招聘?jìng)淇碱}庫(kù)及答案詳解一套
- 2026年賓陽(yáng)縣祥盛人力資源管理有限公司招聘?jìng)淇碱}庫(kù)及參考答案詳解一套
- 2026年中電建生態(tài)環(huán)境集團(tuán)有限公司招聘?jìng)淇碱}庫(kù)含答案詳解
- 福建省泉州市2024-2025學(xué)年高一上學(xué)期期末質(zhì)量監(jiān)測(cè)生物試題(原卷版+解析版)
- 10千伏環(huán)網(wǎng)柜(箱)標(biāo)準(zhǔn)化設(shè)計(jì)方案 (2023 版)
- 2025年湖北省技能高考(建筑技術(shù)類)《建筑材料與檢測(cè)》模擬練習(xí)試題庫(kù)(含答案)
- 偽裝防護(hù)基礎(chǔ)知識(shí)
- 工程后評(píng)價(jià)報(bào)告
- 四川省成都市2024年七年級(jí)上學(xué)期期末數(shù)學(xué)模擬試卷6套【附參考答案】
- PLC課程設(shè)計(jì)六人控制投票機(jī)的設(shè)計(jì)
- 現(xiàn)場(chǎng)管理人員安排、職責(zé)及勞動(dòng)力安排計(jì)劃
- 消化內(nèi)科危重患者護(hù)理
- 個(gè)人公積金貸款合同協(xié)議
- 《連讀與不完全爆破》課件
評(píng)論
0/150
提交評(píng)論