全部產品
Search
文件中心

MaxCompute:本地運行

更新時間:Feb 28, 2024

本文向您介紹本地和分布式環境運行MapReduce的差異和MapReduce本地運行樣本。

各階段介紹

本地運行前:通過在Jar命令中設定–local參數,在本地類比MapReduce的運行過程,從而進行本地調試。

本地運行時:用戶端會從MaxCompute中下載本地調試所需要的輸入表的元資訊、資料,所需要的資源以及輸出表的元資訊,並將這些資訊儲存到一個名為warehouse的本地目錄中。

本地運行結束後:程式運行結束後,會將計算結果輸出到warehouse目錄內的一個檔案中。如果本地的warehouse目錄下已經下載了輸入表及被引用的資源,在下一次運行時,會直接引用warehouse下的資料及檔案,無需重複下載。

本地運行和分布式環境運行差異

在本地啟動並執行過程中,仍然會啟動多個Map及Reduce進程處理資料,但這些進程不是並發運行,而是依次串列運行。

此外,這個本地類比運行過程與真正的分布式運行有如下差別:
  • 輸入錶行數限制:目前最多隻支援下載100行資料。
  • 資源的使用:在分布式環境中,MaxCompute會限制引用資源的大小,詳情請參見MR限制匯總。但在本地運行環境中,不會有資源大小的限制。
  • 安全限制:MaxCompute MapReduce及UDF程式在分布式環境中運行時受到Java沙箱的限制。但在本地運行時,沒有此限制。

本地運行樣本

本地啟動並執行樣本如下。
    odps:my_project> jar -l com.aliyun.odps.mapred.example.WordCount wc_in wc_out
    Summary:
    counters: 10
        map-reduce framework
                combine_input_groups=2
                combine_output_records=2
                map_input_bytes=4
                map_input_records=1
                map_output_records=2
                map_output_[wc_out]_bytes=0
                map_output_[wc_out]_records=0
                reduce_input_groups=2
                reduce_output_[wc_out]_bytes=8
                reduce_output_[wc_out]_records=2
    OK

關於WordCount樣本的代碼介紹請參見WordCount樣本

如果您是第一次運行本地調試命令,命令成功結束後,會在當前路徑下看到一個名為warehouse的路徑。warehouse的目錄結構如下所示。
<warehouse>
   |____my_project(專案空間目錄)
          |____ <__tables__>
          |       |__wc_in(表資料目錄)
          |       |      |____ data(檔案)
          |       |      |
          |       |      |____ <__schema__> (檔案)
          |       |__wc_out(表資料目錄)
          |               |____ data(檔案)
          |               |
          |               |____ <__schema__> (檔案)
          |
          |____ <__resources__>
                  |
                  |___table_resource_name (表資源)
                  |         |____<__ref__>
                  |
                  |___ file_resource_name(檔案資源)
  • my_project的同級目錄表示專案空間。wc_inwc_out表示資料表,您在Jar命令中讀寫的表檔案資料會被下載到這級目錄下。
  • <__schema__>檔案中的內容表示表的元資訊,其檔案格式定義如下。
      project=local_project_name
      table=local_table_name
      columns=col1_name:col1_type,col2_name:col2_type
      partitions=p1:STRING,p2:BIGINT    --本樣本中不需要此字。

    其中,列名與列類型使用英文冒號分隔,列與列之間使用英文逗號分隔。<__schema__>檔案的最前面需要聲明Project名字及Table名字,即project_name.table_name,並通過英文逗號與列的定義做分隔,即project_name.table_name,col1_name:col1_type,col2_name:col2_type,……

  • tables目錄中data檔案表示表的資料。列的數量及資料必須與_schema_檔案的定義相符,不能多列或者少列,列之間使用逗號分隔。
    wc_in_schema_檔案內容如下。
    my_project.wc_in,key:STRING,value:STRING
    data檔案內容如下。
    0,2
    用戶端會從MaxCompute中下載表的元資訊及部分資料內容,並儲存到上述兩個檔案中。如果再次運行此樣本,將直接使用wc_in目錄下的資料,不會再次下載。
    說明 僅在MapReduce的本地運行模式下支援從MaxCompute中下載資料的功能。
    wc_out_schema_檔案內容如下。
    my_project.wc_out,key:STRING,cnt:BIGINT
    data檔案內容如下。
      0,1
      2,1
    用戶端會從MaxCompute中下載wc_out表的元資訊,並儲存到_schema_檔案中。而本地運行後,產生的結果資料,則儲存到data檔案中。
    說明
    • 您也可以自行編輯_schema_data檔案,而後將這兩個檔案放置在對應的表目錄下。
    • 在本地運行時,用戶端檢測到表目錄已經存在,則不會從MaxCompute中下載這個表的資訊。本地的表目錄可以是MaxCompute中不存在的表。