本文為您介紹MapReduce的Sleep示例。
前提條件
已通過快速入門完成測試所需環境配置。
測試準備
準備好測試程序的JAR包,假設名字為mapreduce-examples.jar,本地存放路徑為MaxCompute客戶端bin目錄下data\resources。
準備好SleepJob的測試資源。
-- 首次添加忽略-f覆蓋指令。 add jar data\resources\mapreduce-examples.jar -f;
測試步驟
在MaxCompute客戶端中執行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時長的運行時間,可以看到效果。
代碼示例
Pom依賴信息,請參見注意事項。
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中設置的sleep秒數,進行sleep。*/
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的,所以需要設置reducer個數為0。*/
job.setNumReduceTasks(0);
/**由于沒有輸入表,mapper的個數需要由用戶明確進行指定。*/
job.setNumMapTasks(1);
job.set(SLEEP_SECS, args[0]);
JobClient.runJob(job);
}
}
文檔內容是否對您有幫助?