このトピックでは、MaxCompute Studio で MapReduce プログラムを開発する方法について説明します。このプロセスには、MapReduce プログラムの作成、デバッグ、パッケージ化、アップロード、および実行が含まれます。
前提条件
次の前提条件を満たす必要があります。
-
MaxCompute プロジェクトに接続していること。
詳細については、「プロジェクト接続の管理」をご参照ください。
-
Java モジュールを作成していること。
詳細については、「MaxCompute Java モジュールを作成する」をご参照ください。
MapReduce の作成
[プロジェクト] ペインで、モジュールのソースコードディレクトリ (つまり ) を右クリックし、 を選択します。
-
[Name] を入力し、クラスタイプとして [ドライバー] を選択してから、Enter キーを押します。
-
[Name]: MaxCompute Java クラスの名前。パッケージを作成していない場合は、packagename.classname の形式で名前を入力すると、パッケージが自動的に作成されます。
-
クラスタイプの選択: [ドライバー]、[マッパー]、または [リデューサー]。
説明適切なクラスタイプを選択してください。
-
[ドライバー]: MapReduce ジョブのドライバークラス。ジョブの構成と送信を行います。ドライバー内でマッパーとリデューサーのクラス、およびその他の構成の詳細を指定できます。これがジョブのエントリポイントとなります。
-
[マッパー]: MapReduce データ処理の最初の段階。各入力レコードを処理し、中間キーと値のペアを生成します。
-
[リデューサー]: マッパーからの中間キーと値のペアを受け取り、処理して最終的な出力を生成します。出力は MaxCompute テーブルに保存されます。
-
-
-
クラスを作成した後、エディターで Java コードを記述します。
MaxCompute Studio は、Java テンプレートにフレームワークコードを自動的に入力します。入力テーブル、出力テーブル、マッパーとリデューサーのクラスなどの設定を構成するだけで済みます。
package mymr.myudf; import ... public class HelloDriver { public static void main(String[] args) throws OdpsException { JobConf job = new JobConf(); // TODO: マップ出力タイプを指定 job.setMapOutputKeySchema(SchemaUtils.fromString(?)); job.setMapOutputValueSchema(SchemaUtils.fromString(?)); // TODO: 入力テーブルと出力テーブルを指定 InputUtils.addTable(TableInfo.builder().tableName(?).build(), job); OutputUtils.addTable(TableInfo.builder().tableName(?).build(), job); // TODO: マッパーを指定 job.setMapperClass(?); // TODO: リデューサーを指定 job.setReducerClass(?); RunningJob rj = JobClient.runJob(job); rj.waitForCompletion(); } }
ローカル実行によるデバッグ
ローカル実行を使用して MapReduce プログラムをテストし、出力が期待どおりであることを確認します。
-
完成した Java ファイルを右クリックし、[Run] を選択します。
-
[Run/Debug Configurations] ダイアログボックスで、この実行の MaxCompute プロジェクトを選択します。
[Run/Debug Configurations] ダイアログボックスで、左側のペインの JUnit の下にある [WordCountTest] を選択します。右側の構成ペインで、Test kind を [Class] に設定し、Class フィールドに
com.aliyun.odps.examples.mr.test.WordCountTestを入力し、Use classpath of module を [MyFirstModule] に設定します。 [OK] をクリックして実行を開始します。
説明システムは、ローカル実行中の入力として warehouse 内の指定されたテーブルからデータを読み取ります。 コンソールでログ出力を表示できます。
単体テストによるデバッグ
examples ディレクトリ内の WordCount ユニットテストの例を参照して、テストケースを記述できます。
package com.aliyun.odps.examples.mr.test;
import ...
public class WordCountTest extends M...
// 入力テーブルと出力テーブルのスキーマを定義
private final static String INPUT_...
private final static String OUTPUT_...
private JobConf job;
public WordCountTest() throws Excep...
TestUtil.initWarehouse();
// ジョブを構成
job = new JobConf();
job.setMapperClass(WordCount_Token...
job.setCombinerClass(WordCount_Sum...
job.setReducerClass(WordCount_SumR...
job.setMapOutputKeySchema(SchemaUti...
job.setMapOutputValueSchema(SchemaU...
InputUtils.addTable(TableInfo.build...
OutputUtils.addTable(TableInfo.buil...
}
@SuppressWarnings("deprecation")
@Test
public void testMap() throws IOExce...
MapUTContext mapContext = new MapUT...
mapContext.setInputSchema(INPUT_SC...
mapContext.setOutputSchema(OUTPUT_...
// テストデータを準備
Record record = mapContext.createIn...
record.set(new Text[] {new Text(...
パッケージ化とアップロード
プログラムをデバッグした後、JAR ファイルにパッケージ化し、リソースとして MaxCompute にアップロードします。詳細については、「Java プログラムをパッケージ化、アップロード、登録する」をご参照ください。
MapReduce の実行
MaxCompute クライアントで MapReduce プログラムを実行します。
-
左側メニューで [Project Explorer] をクリックします。
-
プロジェクト名を右クリックし、[Open in Console] を選択します。
-
[Console] ペインで、次のコマンドを実行して MapReduce ジョブを実行します。
コマンドの詳細については、「JAR コマンド」をご参照ください。
jar -resources wordcount.jar -classpath D:\odps\clt\wordcount.jar com.aliyun.odps.examples.mr.WordCount wc_in wc_out;