全部產品
Search
文件中心

MaxCompute:MapReduce

更新時間:Feb 28, 2024

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

MaxCompute提供個兩版本的MapReduce編程介面:
  • MaxCompute MapReduce:MaxCompute的原生介面,執行速度快、開發快捷、不暴露檔案系統。
  • MaxCompute擴充MapReduce(MR2):對MaxCompute MapReduce的擴充,支援更複雜的作業調度邏輯。MapReduce的實現方式與MaxCompute原生介面一致。
以上版本在基本概念作業提交輸入與輸出資源使用等方面基本一致,僅各版本的Java SDK有所不同。本文僅對MapReduce的基本原理做簡單介紹,更多詳情請參見Hadoop Map/Reduce教程
說明 您無法通過MapReduce讀寫外部表格中的資料。

應用情境

MapReduce支援下列情境:
  • 搜尋:網頁爬取、倒排索引、PageRank。
  • Web訪問日誌分析:
    • 分析和挖掘使用者在Web上的訪問、購物行為特徵,實現個人化推薦。
    • 分析使用者訪問行為。
  • 文本統計分析:
    • 熱門小說的字數統計(WordCount)、詞頻TFIDF分析。
    • 學術論文、專利文獻的引用分析和統計。
    • 維基百科資料分析。
  • 海量資料採礦:非結構化資料、時空資料和映像資料採礦。
  • 機器學習:監督學習、無監督學習和分類演算法(例如決策樹、SVM)。
  • 自然語言處理:
    • 基於巨量資料的訓練和預測。
    • 基於語料庫構建單詞同現矩陣,頻繁項集資料採礦、重複項檢測等。
  • 廣告推薦:使用者單擊(CTR)和購買行為(CVR)預測。

MapReduce流程說明

MapReduce處理資料過程主要分成Map和Reduce兩個階段。首先執行Map階段,再執行Reduce階段。Map和Reduce的處理邏輯由使用者自訂實現,但要符合MapReduce架構的約定。MapReduce處理資料的完整流程如下:
  1. 輸入資料:對文本進行分區,將每片內的資料作為單個Map Worker的輸入。分區完畢後,多個Map Worker便可以同時工作。

    在正式執行Map前,需要將輸入資料進行分區。所謂分區,就是將輸入資料切分為大小相等的資料區塊,每一塊作為單個Map Worker的輸入被處理,以便於多個Map Worker同時工作。

  2. Map階段:每個Map Worker在讀入各自的資料後,進行計算處理,最終輸出給Reduce。Map Worker在輸出資料時,需要為每一條輸出資料指定一個Key,這個Key值決定了這條資料將會被發送給哪一個Reduce Worker。Key值和Reduce Worker是多對一的關係,具有相同Key的資料會被發送給同一個Reduce Worker,單個Reduce Worker有可能會接收到多個Key值的資料。
  3. 在進入Reduce階段之前,MapReduce架構會對資料按照Key值排序,使得具有相同Key的資料彼此相鄰。如果您指定了合併作業(Combiner),架構會調用Combiner,將具有相同Key的資料進行彙總。Combiner的邏輯可以由您自訂實現。與經典的MapReduce架構協議不同,在MaxCompute中,Combiner的輸入、輸出的參數必須與Reduce保持一致,這部分的處理通常也叫做洗牌(Shuffle)
  4. Reduce階段:進入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的輸入、輸出只能是表,不允許您自訂輸出格式,不提供類似檔案系統的介面。

使用限制