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

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

最終更新日:Jan 07, 2025

このトピックでは、MapReduceジョブが実行されるローカルモードと分散モードの違いについて説明します。 また、ローカルモードのMapReduceジョブの例も示します。

ローカルモードの概要

ジョブをローカルモードで実行する前に、JARコマンドで -localオプションを指定して、ジョブの実行をシミュレートできます。 これにより、ジョブに対してローカルデバッグを実行できます。

ジョブの実行中に、クライアントは入力テーブルのメタデータとデータ、出力テーブルのメタデータ、およびローカルデバッグに必要なリソースをMaxComputeからダウンロードします。 ダウンロードされたデータは、warehouseという名前のローカルディレクトリに保存されます。

ジョブの完了後、計算結果はwarehouseディレクトリのファイルに保存されます。 入力テーブルと必要なリソースがwarehouseディレクトリにダウンロードされた場合、MapReduceは、データを再度ダウンロードするのではなく、次回ディレクトリ内のデータとファイルを直接参照します。

ローカルモードと分散モードの違い

ローカルモードで実行されるMapReduceジョブは、データを処理するために複数のマップおよび縮小タスクを開始します。 これらのタスクは順番に実行されます。

シミュレートされた実行プロセスは、次の点で実際の分散実行プロセスとは異なります。

  • 入力テーブルの行: 最大100行のデータをローカルモードでダウンロードできます。

  • リソース使用量: 分散モードでは、MaxComputeは参照できるリソースのサイズを制限します。 詳細については、「MapReduceの制限」をご参照ください。 しかしながら、ローカルモードにおけるリソースのサイズに制限は課されない。

  • セキュリティ: MaxCompute MapReduceとユーザー定義関数 (UDF) は、分散モードのJavaサンドボックスによって制限されます。 ただし、ローカルモードでは制限はありません。

次のコードは、ローカルモードのMapReduceジョブの例を示しています。

    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 (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コマンドを使用して読み書きしたテーブルデータは、このレベルのディレクトリにダウンロードされます。

  • <__ schema __> ファイルには、テーブルのメタデータが格納されます。 次のコードは、ファイル形式を定義します。

      project=local_project_name
      table=local_table_name
      columns=col1_name:col1_type,col2_name:col2_type
      partitions=p1:STRING,p2:BIGINT    -- In this example, you do not need to specify this field.

    列の名前とデータ型はコロン (:) で区切ります。 列はコンマ (,) で区切ります。 プロジェクト名とテーブル名project_name.table_nameは、<__ schema __> ファイルの先頭で宣言する必要があります。 宣言と列の定義はコンマ (,) で区切ります。 例: 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ディレクトリのデータを再度ダウンロードするのではなく、直接使用します。

    説明

    MaxComputeからダウンロードできるのは、ローカルモードで実行されるMapReduceジョブのみです。

    wc_outディレクトリの _schema_ ファイルには、次のデータが含まれています。

    my_project.wc_out,key:STRING,cnt:BIGINT

    dataファイルには次のデータが含まれています。

      0,1
      2,1

    クライアントはMaxComputeからwc_outテーブルのメタデータをダウンロードし、データを _schema_ ファイルに保存します。 ジョブが完了すると、結果はデータファイルに保存されます。

    説明
    • _schema_ およびdataファイルを編集して、テーブルディレクトリにファイルを保存することもできます。

    • ジョブをローカルモードで実行し、クライアントがテーブルディレクトリが存在することを検出した場合、クライアントはこのテーブルの情報をMaxComputeからダウンロードしません。 ローカルテーブルディレクトリには、MaxComputeに存在しないテーブルを含めることができます。