基本ステージの概要

ローカル実行の前提条件: jar コマンドの –local パラメーターを設定することで、ローカルで MapReduce 実行プロセスをシミュレートして、ローカルデバッグを開始することができます。

ローカルオペレーション時: クライアントは、必要な入力テーブルのメタ情報、リソース、出力テーブルのメタ情報を MaxCompute からダウンロードし、warehouse という名前のローカルディレクトリに保存します。

プログラムの実行後: 計算結果が warehouse 内のファイルに出力されます。入力テーブルと参照先リソースがローカル warehouse ディレクトリにダウンロードされている場合、warehouse ディレクトリ内のデータとファイルは次回の実行時に直接参照されるので、ダウンロードプロセスを繰り返す必要はありません。

ローカル実行環境と実行分散環境の違い

ローカルオペレーションコースでは、複数の Map および Reduce worker はまだデータ処理を開始していません。 しかし、これらの worker は同時に実行するのではなく、順次実行します。

シミュレーションプロセスと実際の分散オペレーションの相違点は次のとおりです。

  • 入力テーブルの行数に制限があります。 現在、最大 100 行のデータがダウンロード可能です。
  • リソース使用量: 分散環境では、MaxCompute は参照されるリソースのサイズを制限しています。 詳細は「アプリケーション制限」をご参照ください。 なお、ローカル実行環境では、リソースサイズに制限はありません。
  • セキュリティ制限: 分散環境で動作する 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(project directory)
          |____ <__tables__>
          | |__wc_in(table 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)
  • myproject と同じ階層のディレクトリはプロジェクトを示します。wcin と 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

    列と列タイプはコロン (:) で区切り、列同士はカンマ (,) で区切ります。 <__schema__> ファイルに応じて、プロジェクト名とテーブル名を宣言し (project_name.table_name など)、カンマ (,) で区切ってから列定義を宣言する必要があります (project_name.table_name,col1_name:col1_type,col2_name:col2_type,……)。

  • ファイル data はテーブルデータを示します。列数および対応するデータは、"_schema_" の定義に従う必要があります。 また、列の追加や欠落は許可されていません。
    wc_in の "_schema_" の内容は次のとおりです。
    my_project.wc_in,key:STRING,value:STRING
    'data' の内容は次のとおりです。
    0,2
    クライアントは MaxCompute からテーブルのメタ情報とデータの一部をダウンロードして、前述の 2 つのファイルに保存します。 この例をもう一度実行すると、ディレクトリ ‘wc_in’ 内のデータが直接使用され、再度ダウンロードされることはありません。
    MaxCompute からデータをダウンロードする機能は、MapReduce ローカルオペレーションモードでのみサポートされています。Eclipse 開発プラグインでローカルデバッグを実行した場合は、MaxCompute のデータをローカルにダウンロードすることはできません。
    wc_out の '_schema_' の内容は次のとおりです。
    my_project.wc_out,key:STRING,cnt:BIGINT
    'data' の内容は次のとおりです。
      0,1
      2,1
    クライアントは MaxCompute から wc_out のメタ情報をダウンロードし、ファイル "_schema_" に保存します。 ファイル 'data' は、ローカルオペレーション後に生成された結果データファイルです。
    • ユーザーは "_schema_" ファイルと 'data' を編集して、これら 2 つのファイルを対応するテーブルディレクトリに置くこともできます。
    • ローカルで実行中、クライアントはテーブルディレクトリが既に存在することに気付くので、MaxCompute からこのテーブル情報をダウンロードしません。ローカルのテーブルディレクトリは、MaxCompute に存在しないテーブルであっても構いません。