すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:ローカルモードでのジョブ実行

最終更新日:Mar 26, 2026

ローカルモードを使用すると、MapReduce ジョブを分散クラスターに送信する前に、お使いのマシンでデバッグできます。コードを変更するたびにクラスターに再デプロイする代わりに、-local フラグを使用してジョブをローカルで実行し、結果をすぐに確認できます。

仕組み

jar コマンドに -local フラグを追加すると、ジョブがローカルで実行されます。MaxCompute クライアントは以下の処理を行います:

  1. 入力テーブルのメタデータとデータ、出力テーブルのメタデータ、および必要なリソースを MaxCompute から warehouse という名前のローカルディレクトリにダウンロードします。

  2. 複数のマップタスクとリデュースタスクを並列ではなく順次実行します。

  3. 結果を warehouse ディレクトリ内のファイルに書き込みます。

後続の実行では、入力テーブルとリソースがすでに warehouse に存在する場合、クライアントは再ダウンロードせずに直接それらを読み取ります。

説明

ローカルモードで実行される MapReduce ジョブの場合にのみ、MaxCompute からデータをダウンロードできます。

ローカルモードと分散モードの比較

ディメンションローカルモード分散モード
入力行最大 100 行制限なし
リソースサイズ制限なし制限付き (「MapReduce の制限」をご参照ください)
セキュリティ制限なしMapReduce およびユーザー定義関数 (UDF) に Java サンドボックスが適用されます

ローカルモードでのジョブ実行

次の例では、WordCount プログラムを wc_in テーブルに対して実行し、出力を wc_out に書き込みます。

ステップ 1:jar コマンドの実行

odps:my_project> jar -l com.aliyun.odps.mapred.example.WordCount wc_in wc_out

WordCount の完全なサンプルコードについては、「WordCount」をご参照ください。

ステップ 2:出力の確認

実行が成功すると、カウンターを含む概要が出力されます:

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

ステップ 3:warehouse ディレクトリでの結果の検証

最初の実行で、現在のパスに warehouse ディレクトリが作成されます。構造は以下の通りです:

<warehouse>
   |____my_project (project directory)
          |____ <__tables__>
          |       |__wc_in (table data directory)
          |       |      |____ data (file)
          |       |      |
          |       |      |____ <__schema__> (file)
          |       |__wc_out (table data directory)
          |               |____ data (file)
          |               |
          |               |____ <__schema__> (file)
          |
          |____ <__resources__>
                  |
                  |___table_resource_name (table resource)
                  |         |____<__ref__>
                  |
                  |___ file_resource_name (file resource)
  • my_project と同じレベルのディレクトリはプロジェクトを表します。

  • wc_in および wc_out と同じレベルのディレクトリはデータテーブルを表します。jar コマンドによって読み書きされるテーブルデータは、このレベルに保存されます。

wc_in 入力データの検証

<__schema__> ファイルにはテーブルのメタデータが保存されます。wc_in の場合:

my_project.wc_in,key:STRING,value:STRING

data ファイルにはダウンロードされた行が含まれます:

0,2

クライアントは MaxCompute からメタデータとテーブルデータの一部をダウンロードし、これらのファイルに保存しました。次回の実行では、ダウンロードは不要で、wc_in から直接読み取られます。

wc_out 出力データの検証

wc_out のスキーマ:

my_project.wc_out,key:STRING,cnt:BIGINT

ジョブが完了すると、data ファイルに結果が格納されます:

0,1
2,1

スキーマファイルの形式

<__schema__> ファイルはテーブル構造を定義します:

project=local_project_name
table=local_table_name
columns=col1_name:col1_type,col2_name:col2_type
partitions=p1:STRING,p2:BIGINT    -- optional

フォーマットのルール:

  • 列名とその型はコロン (:) で区切ります。

  • 列はカンマ (,) で区切ります。

  • ファイルの先頭で project_name.table_name を宣言し、列定義とカンマで区切ります。例: project_name.table_name,col1_name:col1_type,col2_name:col2_type

注意事項

  • MaxCompute からダウンロードせずにカスタムテストデータを提供するには、<__schema__> ファイルと data ファイルを直接編集します。

  • クライアントが warehouse 内にテーブルディレクトリがすでに存在することを検出した場合、そのテーブルのダウンロードをスキップします。これは、ローカルのテーブルディレクトリが MaxCompute に存在しないテーブルを参照できることを意味します。

次のステップ

  • WordCount — このトピックで使用される WordCount の例の完全なサンプルコード

  • MapReduce の制限 — 分散モードで適用されるリソースサイズおよびその他の制限