全部產品
Search
文件中心

MaxCompute:MapReduce

更新時間:Mar 13, 2025

本文為您介紹MaxCompute支援的MapReduce編程介面及使用限制。

MaxCompute提供兩個MapReduce編程介面:

  • MaxCompute MapReduce:MaxCompute的原生介面,執行速度快、開發快捷、不暴露檔案系統。

  • MaxCompute擴充MapReduce(MR2):支援更複雜的作業調度邏輯,且實現方式與MaxCompute原生介面一致。相比於傳統的MapRedce,MaxCompute提供的擴充MapReduce模型(簡稱MR2)改變了底層的調度和IO模型,可避免作業時冗餘的IO操作。

以上版本在基本概念作業提交輸入與輸出資源使用等方面基本一致,僅各版本的Java SDK有所不同。更多詳情請參見Hadoop Map/Reduce教程

說明

您無法通過MapReduce讀寫外部表格中的資料。

MapReduce

應用情境

MapReduce支援下列情境:

  • 搜尋:網頁爬取、倒排索引、PageRank。

  • Web訪問日誌分析:

    • 分析和挖掘使用者在Web上的訪問、購物行為特徵,實現個人化推薦。

    • 分析使用者訪問行為。

  • 文本統計分析:

    • 熱門小說的字數統計(WordCount)、詞頻TFIDF分析。

    • 學術論文、專利文獻的引用分析和統計。

    • 維基百科資料分析。

  • 海量資料採礦:非結構化資料、時空資料和映像資料採礦。

  • 機器學習:監督學習、無監督學習和分類演算法(例如決策樹、SVM)。

  • 自然語言處理:

    • 基於巨量資料的訓練和預測。

    • 基於語料庫構建單詞同現矩陣,頻繁項集資料採礦、重複項檢測等。

  • 廣告推薦:使用者單擊(CTR)和購買行為(CVR)預測。

MapReduce流程說明

MapReduce處理資料過程主要分成Map和Reduce兩個階段。首先執行Map階段,再執行Reduce階段。Map和Reduce的處理邏輯由使用者自訂實現,但要符合MapReduce架構的約定。MapReduce處理資料的完整流程如下:

  1. 輸入資料:在正式執行Map前,需要對輸入資料進行分區(即將輸入資料切分為大小相等的資料區塊),將每片內的資料作為單個Map Worker的輸入,以便多個Map Worker同時工作。

  2. Map階段:每個Map Worker讀取資料後進行計算處理,並為每條輸出資料指定一個Key,決定這條資料將會被發送給哪一個Reduce Worker。

    說明

    Key值和Reduce Worker是多對一的關係,具有相同Key的資料會被發送給同一個Reduce Worker,單個Reduce Worker有可能會接收到多個Key值的資料。

  3. Shuffle階段:在進入Reduce階段之前,MapReduce架構會將資料按照Key值排序,使得具有相同Key的資料彼此相鄰。如果您指定了合併作業(Combiner),架構會調用Combiner,將具有相同Key的資料進行彙總。Combiner的邏輯可以由您自訂實現。與經典的MapReduce架構協議不同,在MaxCompute中,Combiner的輸入、輸出的參數必須與Reduce保持一致,這部分的處理通常也叫做洗牌(Shuffle)

  4. Reduce階段:相同Key的資料會傳送至同一個Reduce Worker。同一個Reduce Worker會接收來自多個Map Worker的資料。每個Reduce Worker會對Key相同的多個資料進行Reduce操作。最後,一個Key的多條資料經過Reduce的作用後,將變成一個值。

  5. 輸出結果資料。

說明

上文僅是對MapReduce架構的簡單介紹,更多詳情請查閱功能介紹

下文將以WordCount為例,為您介紹MaxCompute MapReduce各個階段的概念。

假設存在一個文本a.txt,文本內每行是一個數字,您要統計每個數字出現的次數。文本內的數字稱為Word,數字出現的次數稱為Count。如果MaxCompute MapReduce完成這一功能,需要經歷以下流程,圖示如下。

操作步驟

  1. 輸入資料:對文本進行分區,將每片內的資料作為單個Map Worker的輸入。

  2. Map階段:Map處理輸入,每擷取一個數字,將數位Count設定為1,並將此<Word, Count>對輸出,此時以Word作為輸出資料的Key。

  3. Shuffle>合并排序:在Shuffle階段前期,首先對每個Map Worker的輸出,按照Key值(即Word值)進行排序。排序後進行Combiner操作,即將Key值(Word值)相同的Count累加,構成一個新的<Word, Count>對。此過程被稱為合并排序。

  4. Shuffle>分配Reduce:在Shuffle階段後期,資料被發送到Reduce端。Reduce Worker收到資料後依賴Key值再次對資料排序。

  5. Reduce階段:每個Reduce Worker對資料進行處理時,採用與Combiner相同的邏輯,將Key值(Word值)相同的Count累加,得到輸出結果。

  6. 輸出結果資料。

說明

由於MaxCompute的所有資料都被存放在表中,因此MaxCompute MapReduce的輸入、輸出只能是表,不允許您自訂輸出格式,不提供類似檔案系統的介面。

使用限制

擴充MapReduce(MR2)

與MaxCompute相比,MR2在Map、Reduce等函數編寫方式上基本一致,較大的不同點發生在執行作業時,樣本請參見Pipeline樣本

MR2模型產生背景

傳統的MapReduce模型要求在經過每一輪MapReduce操作後,得到的資料結果必須儲存到Distributed File System中(例如,HDFS或MaxCompute資料表)。MapReduce模型通常由多個MapReduce工作群組成,每個作業執行完成後都需要將資料寫入磁碟,然而後續的Map任務很可能只需要讀取一遍這些資料,為之後的Shuffle階段做準備,這種情況就產生了冗餘的磁碟IO操作。

MaxCompute的計算調度邏輯可以支援更複雜的編程模型, 針對上述情況,可以在Reduce後直接執行下一次的Reduce操作,而不需要中間插入一個Map操作。因此,MaxCompute提供了擴充的MapReduce模型,即可以支援Map後串連任意多個Reduce操作,例如Map>Reduce>Reduce。

與Hadoop Chain Mapper/Reducer對比

Hadoop Chain Mapper/Reducer也支援類似的序列化Map或Reduce操作,但和MaxCompute的擴充MapReduce(MR2)模型有本質的區別。

Chain Mapper/Reducer基於傳統的MapReduce模型,僅可以在原有的Mapper或Reducer後增加一個或多個Mapper操作(不允許增加Reducer)。這樣的優點是,您可以複用之前的Mapper商務邏輯,把一個Map或Reduce拆成多個Mapper階段,同時本質上並沒有改變底層的調度和I/O模型。