前提条件
- テストプログラムの Jar パッケージを準備します。 パッケージの名前を " mapreduce-examples.jar " 、ローカルストレージパスを " data\resources " とします。
- SleepJob 操作をテストするためのリソースを準備します。
Add jar data \ resources \ mapreduce-examples.jar-f;
手順
以下のように odpscmd で Sleep を実行します。
jar -resources mapreduce-examples.jar -classpath data\resources\mapreduce-examples.jar
com.aliyun.odps.mapred.open.example.Sleep 10;
jar -resources mapreduce-examples.jar -classpath data\resources\mapreduce-examples.jar
com.aliyun.odps.mapred.open.example.Sleep 100;
予想される出力
ジョブが正常に実行されます。 さまざまな sleep 時間の実行時間を比較して効果を判断します。
サンプルコード
package com.aliyun.odps.mapred.open.example;
import java.io.IOException;
import com.aliyun.odps.mapred.JobClient;
Import com.aliyun.odps.mapred.mapperbase;
import com.aliyun.odps.mapred.conf.JobConf;
public class Sleep {
private static final String SLEEP_SECS = "sleep.secs";
public static class MapperClass extends MapperBase {
// データが入力されていないので、map 関数は実行されず、関連するロジックは setup に書き込まれるだけです。
@Override
public void setup(TaskContext context) throws IOException {
try {
// jobconf に設定されたスリープの秒数を取得
Thread.sleep(context.getJobConf().getInt(SLEEP_SECS, 1) * 1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
public static void main(String[] args) throws Exception {
if (args.length ! = 1) {
System.err.println("Usage: Sleep <sleep_secs>");
System.exit(-1);
}
JobConf job = new JobConf();
job.setMapperClass(MapperClass.class);
// このインスタンスは、maponly のため、reductor 数に 0 を設定する必要があります。
job.setNumReduceTasks(0);
// 入力テーブルが存在しないため、mapper 数を明示的に指定する必要があります。
job.setNumMapTasks(1);
job.set(SLEEP_SECS, args[0]);
JobClient.runJob(job);
}
}