ODPS MR ノードを作成することで、MapReduce Java API を使用して MaxCompute のデータを処理する MapReduce プログラムを作成し、スケジューリングできます。
前提条件
-
必要なリソースがアップロード、送信、公開されていること。 詳細については、「MaxCompute リソースの作成と使用」をご参照ください。
-
ODPS MR ノードが作成されていること。 詳細については、「MaxCompute ノードの作成と管理」をご参照ください。
ODPS MR ノードを作成する前に、必要なリソースをアップロード、送信、公開する必要があります。
背景
MapReduce は、ユーザーが作成したビジネスロジックと組み込みコンポーネントを組み合わせて Hadoop クラスター上で並行実行するための分散プログラミングフレームワークです。 MaxCompute は、2 つのバージョンの MapReduce プログラミングインターフェイスを提供しています。 詳細については、「MapReduce」をご参照ください。
-
MaxCompute MapReduce: ネイティブの MaxCompute インターフェイスです。 ファイルシステムを公開することなく、高速な実行と迅速な開発を実現します。
-
Extended 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: リソース名を右クリックし、リソースのリファレンス を選択すると、このステートメントが自動的に生成されます。 -
-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 タスクを開発するその他のシナリオについては、次のトピックをご参照ください:
次のステップ
ノードを開発した後、必要に応じて次の操作を実行してください。
-
スケジューリング設定:定期的に実行されるタスクに対して、再実行設定や依存関係などの定期的なスケジューリングプロパティを設定します。詳細については、「タスクスケジューリング設定の概要」をご参照ください。
-
タスクのデバッグ:ノードコードをテストおよび実行して、そのロジックを検証します。詳細については、「タスクのデバッグプロセス」をご参照ください。
-
タスクのデプロイ:ノードをデプロイして、スケジューリング設定に基づいて定期的に実行します。詳細については、「タスクのデプロイ」をご参照ください。
-
MapReduce のよくある質問: MapReduce タスクに関する一般的な問題とトラブルシューティング。