ローカルモードを使用すると、MapReduce ジョブを分散クラスターに送信する前に、お使いのマシンでデバッグできます。コードを変更するたびにクラスターに再デプロイする代わりに、-local フラグを使用してジョブをローカルで実行し、結果をすぐに確認できます。
仕組み
jar コマンドに -local フラグを追加すると、ジョブがローカルで実行されます。MaxCompute クライアントは以下の処理を行います:
入力テーブルのメタデータとデータ、出力テーブルのメタデータ、および必要なリソースを MaxCompute から
warehouseという名前のローカルディレクトリにダウンロードします。複数のマップタスクとリデュースタスクを並列ではなく順次実行します。
結果を
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_outWordCount の完全なサンプルコードについては、「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:STRINGdata ファイルにはダウンロードされた行が含まれます:
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 の制限 — 分散モードで適用されるリソースサイズおよびその他の制限