劉琦
如果你有一個大型分布式處理問題需要解決,同時又預算吃緊,就很有必要了解一下Hadoop,然后考慮Amazon的Elastic MapReduce來解決問題。Amazon Web Services(AWS)日前發(fā)布了Amazon Elastic MapReduce的公共測試版,這是一項可以讓商務人士、研究學者、數(shù)據(jù)分析員和開發(fā)者處理數(shù)據(jù)的網(wǎng)絡服務。
它采用了托管的Hadoop框架,運行在AmazonEC2和AmazonS3的網(wǎng)絡架構(gòu)下。Amazon Elastic MapReduce大幅縮短了時間、降低了復雜度以及執(zhí)行數(shù)據(jù)密集型任務所需的成本。同其他AWS提供的服務一樣,Amazon Elastic MapReduce的用戶只需為他們使用的部分付費。
Hadoop一覽
Hadoop是一個開源的分布式計算平臺,它主要由MapReduce的算法執(zhí)行(即map/reduce函數(shù))和一個分布式的文件系統(tǒng)(即S3)等兩部分組成。去年起Hadoop就已經(jīng)可以在Amazon EC2上運行了。這將使開發(fā)者可以快速搭建起他們自己的服務器集群。
Hadoop框架中最核心的設(shè)計是MapReduce和HDFS。簡單用一句話解釋MapReduce就是“任務的分解與結(jié)果的匯總”。HDFS是Hadoop分布式文件系統(tǒng)的縮寫,為分布式計算存儲提供了底層支持。Hadoop的內(nèi)部架構(gòu)基于MapReduce框架。MapReduce的運行機制在J.Dean和S.Ghemawat合著的文檔中有著很清晰的描述,正因如此,本文換了一個角度,將重點放在實例的說明上。
Amazon Elastic MapReduce自動地在Amazon EC2實例上驅(qū)動一個MapReduce框架的Hadoop實現(xiàn)。它會按照客戶的需求自動啟動并配置一定數(shù)量的AmazonEC2實例,然后產(chǎn)生一個根據(jù)MapReduce編程模型的Hadoop任務,通過它從AmazonS3中讀取大量的用戶輸入數(shù)據(jù),將任務流中的數(shù)據(jù)分解為更小的塊分攤給生成的AmazonEC2實例去進行并行處理,并最終將處理后的數(shù)據(jù)重新組合在一起成為最后結(jié)果。數(shù)據(jù)處理完成后,它會將數(shù)據(jù)重新組合并簡化為一個最終結(jié)果,并將該結(jié)果返回給AmazonS3。Amazon S3作為被分析的數(shù)據(jù)源,也作為最終結(jié)果輸出的目的地。
云中的MapReduce
用戶訪問Amazon Elastic MapReduce 的第一站是AWS的登錄頁,用戶必須在該頁面注冊Elastic MapReduce服務,然后進入AWS管理控制臺并且登錄。AWS控制臺是一個專門為Amazon EC2提供的控制面板,顯示新增的Amazon Elastic MapReduce選項卡。單擊該選項卡后,用戶將進入工作流頁面,在這里就可以監(jiān)控當前工作流的實時狀況了,同時也可以檢查之前的工作流細節(jié)。
如果用戶想要定義一個新的工作流,系統(tǒng)會提示用戶在文本框中確定輸入數(shù)據(jù)的路徑、輸出數(shù)據(jù)的路徑以及map和reduce函數(shù)的路徑。
Amazon Elastic MapReduce接受兩種類型的工作流:“自定義jar”以及“流(streaming)”?!弊远xjar”類型的工作流需要map和reduce函數(shù)位于編譯過的Java類中,并且以Java Jar形式儲存。Hadoop框架是基于Java的,因此一個自定義工作流會提供更好的性能。與之相對,“流”類型的工作流可以讓用戶通過非Java語言方式自行編寫map和reduce函數(shù)?!傲鳌鳖愋偷墓ぷ髁骱瘮?shù)從標準輸入流中讀取輸入數(shù)據(jù),并將輸出發(fā)送到標準輸入流。因此,數(shù)據(jù)流以字符串方式輸入或輸出。
一旦用戶指定工作流組成部分的路徑,也就確定了執(zhí)行作業(yè)的EC2實例的個數(shù)及處理能力,用戶可以選擇多達20個EC2實例,如果超出20個,則必須填寫一份特定的申請表格。用戶對計算實例的選擇范圍可以從小型到大型高速CPU,并可以通過查看Amazon文檔獲得完整CPU實例的功能描述。接下來的步驟就是處理了。一旦確定了所做的配置,任務就啟動了,之后將返回到工作流頁面,在該頁面中監(jiān)控任務進程。當工作完成后,用戶的輸出數(shù)據(jù)就被儲存到指定的S3桶中了。