基本ステージの概要
ローカル実行の前提条件: 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>
|____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 に存在しないテーブルであっても構いません。