Amazon的彈性MapReduce是通過EC2和S3來實現的,其基本架構如圖3-30所示。

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