Amazon的彈性MapReduce是通過EC2和S3來實現(xiàn)的,其基本架構(gòu)如圖3-30所示。
用戶在使用彈性MapReduce時,首先要將相關(guān)數(shù)據(jù)上傳至S3,在Amazon彈性MapReduce中,S3作為原始數(shù)據(jù)和處理結(jié)果的存儲系統(tǒng)。需要上傳的相關(guān)數(shù)據(jù)中既包括用戶待處理的數(shù)據(jù),也包括一個Mapper和一Reducer執(zhí)行代碼。Mapper和Reducer分別實現(xiàn)了MapReduce中的Map(映射)和Reduce(化簡)功能。這兩個功能實現(xiàn)的語言并沒有限制,用戶可以根據(jù)自己的習(xí)慣選擇。在彈性MapReduce內(nèi)部也有一些Amazon提供給用戶的默認(rèn)Mapper和Reducer。相關(guān)數(shù)據(jù)上傳成功后用戶就可以向系統(tǒng)發(fā)出一個服務(wù)請求,系統(tǒng)接收到請求后就會啟動一個由一定數(shù)量的EC2實例組成的集群系統(tǒng),集群中的實例數(shù)量和實例類型用戶可以自行設(shè)置。為了使集群的效率達(dá)到最高,用戶在使用前最好做相關(guān)測試以確定需要的實例數(shù)量和類型。EC2集群系統(tǒng)采用主/從(Master/Slave)模式,即系統(tǒng)中有一個主節(jié)點和若干數(shù)量的從節(jié)點,主/從節(jié)點上都運行著Hadoop。主節(jié)點上的Hadoop在主節(jié)點接受啟動集群的服務(wù)請求后,將S3中的待處理數(shù)據(jù)劃分成若干個子數(shù)據(jù)集:從節(jié)點從S3中下載相關(guān)子數(shù)據(jù)集,這包括劃分好的待處理數(shù)據(jù)的子集、一個Mapper以及一個Reducer;接下來,每個從節(jié)點都獨自處理分發(fā)到的子數(shù)據(jù)集。整個運行過程在主節(jié)點的監(jiān)測之下,每個從節(jié)點需要向主節(jié)點發(fā)送運行狀態(tài)元數(shù)據(jù)(Status Metadata)。處理完的結(jié)果將再次被匯總至S3,此時彈性MapReduce服務(wù)會通知用戶數(shù)據(jù)處理完畢,用戶直接從S3上下載最終結(jié)果即可。
從上面的處理過程可以看出,彈性MapReduce的運行過程非常簡單,用戶根本不需要考慮計算中涉及的服務(wù)器托管部署、維護(hù)及軟件環(huán)境的配置。除了這些基本的設(shè)置不需要用戶處理之外,Amazon在可靠性、數(shù)據(jù)安全等方面也采取了和其他云計算服務(wù)類似的措施。例如為了保證髙可靠性,子數(shù)據(jù)集不是被分發(fā)到一個從節(jié)點而是被分發(fā)到多個從節(jié)點,這樣保證單個從節(jié)點的失敗不會影響最后結(jié)果。Amazon允許用戶在上傳數(shù)據(jù)前對數(shù)據(jù)進(jìn)行加密并通過安全的HTTPS協(xié)議上傳數(shù)據(jù)。彈性MapReduce中的實例被劃分成 兩個安全組:一個是主節(jié)點安全組,另一個是從節(jié)點安全組。Amazon提供了諸如此類的一系列完善的用戶安全服務(wù)。在彈性MapReduce中,有一個概念需要特別提請注意: 任務(wù)流(Job Flow),任務(wù)流實際上是由一系列前后相關(guān)的處理過程組成的,可以與線性鏈表的結(jié)構(gòu)類比,除了第一個節(jié)點和最后一個節(jié)點,每個節(jié)點既是前一個節(jié)點的后繼也是后一個節(jié)點的前驅(qū)。同樣的道理,任務(wù)流中除了第一個任務(wù)和最后一個任務(wù)外,其他的任務(wù)既是作為上一個任務(wù)的輸出也是作為下一個任務(wù)的輸入。Amazon的彈性MapReduce將數(shù)據(jù)的實際計算過程都看成是任務(wù)流中的某一個步驟。