MaxCompute は MapReduce プログラミングインターフェイスを提供します。ODPS MR ノードを作成してスケジューリングのために送信し、MapReduce Java API を使用して MapReduce プログラムを作成し、MaxCompute のデータを処理できます。
前提条件
必要なリソースをアップロード、送信、公開済みであること。詳細については、「MaxCompute リソースの作成と使用」をご参照ください。
ODPS MR ノードを作成済みであること。詳細については、「MaxCompute ノードの作成と管理」をご参照ください。
ODPS MR ノードを作成する前に、必要なリソースをアップロード、送信、公開する必要があります。
背景情報
MapReduce は、分散アプリケーション向けのプログラミングフレームワークです。ユーザーが作成したビジネスロジックと組み込みコンポーネントを組み合わせて、Hadoop クラスター上で同時に実行される完全な分散プログラムを構築します。MaxCompute は、2 つのバージョンの MapReduce プログラミングインターフェイスを提供します。詳細については、「MapReduce」をご参照ください。
MaxCompute MapReduce:ネイティブの MaxCompute インターフェイスです。高速な実行、迅速な開発が可能で、ファイルシステムを公開しません。
拡張 MaxCompute MapReduce (MR2):MaxCompute MapReduce の拡張機能で、より複雑なジョブスケジューリングロジックをサポートします。実装はネイティブインターフェイスと同じです。
DataWorks では、ODPS MR ノードを使用して、MaxCompute MapReduce タスクをスケジューリング、実行し、他のジョブと統合できます。
制限事項
ODPS MR ノードの制限事項については、「使用制限」をご参照ください。
例:単純な WordCount ジョブ
次の例では、ODPS MR ノードを使用して、wc_in テーブル内の各文字列の出現回数をカウントし、その結果を wc_out テーブルに書き込む方法を説明します。
mapreduce-examples.jar リソースをアップロード、送信、公開します。詳細については、「MaxCompute リソースの作成と使用」をご参照ください。
説明mapreduce-examples.jar パッケージ内の実装ロジックの詳細については、「WordCount の例」をご参照ください。
ODPS MR ノードに次のコードを入力して実行します。
-- 入力テーブルを作成します。 CREATE TABLE if not exists wc_in (key STRING, value STRING); -- 出力テーブルを作成します。 CREATE TABLE if not exists wc_out (key STRING, cnt BIGINT); --- システムの dual テーブルを作成します。 drop table if exists dual; create table dual(id bigint); -- この疑似テーブルがワークスペースに存在しない場合は、作成してデータを初期化する必要があります。 --- システムの疑似テーブルのデータを初期化します。 insert overwrite table dual select count(*)from dual; --- 入力テーブル wc_in にサンプルデータを挿入します。 insert overwrite table wc_in select * from ( select 'project','val_pro' from dual union all select 'problem','val_pro' from dual union all select 'package','val_a' from dual union all select 'pad','val_a' from dual ) b; -- アップロードした JAR リソースを参照します。リソースリストでリソースを右クリックし、[リソースパスの挿入] を選択します。 --@resource_reference{"mapreduce-examples.jar"} jar -resources mapreduce-examples.jar -classpath ./mapreduce-examples.jar com.aliyun.odps.mapred.open.example.WordCount wc_in wc_outこのコードには、次の文とパラメーターが含まれています:
--@resource_reference:リソース名を右クリックし、Insert Resource Path を選択すると、この文が自動的に生成されます。-resources:参照される JAR リソースのファイル名です。-classpath:JAR パッケージへのパスです。リソースはすでに参照されているため、パスは現在のディレクトリ (./) 内の JAR ファイルを指します。com.aliyun.odps.mapred.open.example.WordCount:JAR ファイルから実行するメインクラスの完全修飾名です。wc_in:MapReduce ジョブの入力テーブルの名前です。このテーブルは前のコードで作成されます。wc_out:MapReduce ジョブの出力テーブルの名前です。このテーブルは前のコードで作成されます。MapReduce ジョブで複数の JAR リソースが必要な場合は、パスをカンマで区切ります。例:
-classpath ./xxxx1.jar,./xxxx2.jar。
結果:OK
ODPS SQL ノードで、次のコマンドを実行して wc_out テーブルのデータをクエリします。
select * from wc_out;期待される出力:
+------------+------------+ | key | cnt | +------------+------------+ | package | 1 | | pad | 1 | | problem | 1 | | project | 1 | | val_a | 2 | | val_pro | 2 | +------------+------------+
高度な例
より多くのシナリオで MaxCompute MapReduce タスクを開発する方法については、次のトピックをご参照ください:
次のステップ
現在のノードでタスクの開発が完了したら、次の操作を実行できます:
-
スケジューリング設定:ノードの定期的なスケジューリングプロパティを設定します。定期的に実行する必要があるタスクについては、再実行設定やスケジューリングの依存関係などのプロパティを設定する必要があります。詳細については、「タスクスケジューリング設定の概要」をご参照ください。
-
タスクのデバッグ:ノードのコードをテストおよび実行して、そのロジックが正しいことを確認します。詳細については、「タスクのデバッグプロセス」をご参照ください。
-
タスクのデプロイ:開発が完了したら、タスクノードをデプロイします。デプロイされたノードは、スケジューリング設定に基づいて定期的に実行されます。詳細については、「タスクのデプロイ」をご参照ください。
MaxCompute MapReduce に関するよくある質問:MapReduce タスクの実行時に発生する一般的な問題について学び、例外のトラブルシューティングを迅速に行うのに役立ちます。