822
微信
Java快速開始__快速入門_批量計算-阿裏雲
Java快速開始例子
本文檔將介紹如何使用 Java 版 SDK 來提交一個作業,目的是統計一個日誌文件中“INFO”,”WARN”,”ERROR”,”DEBUG”出現的次數。
如果您還沒開通批量計算服務,請先開通。
步驟預覽
- 作業準備
- 上傳數據文件到OSS
- 使用示例代碼
- 編譯打包
- 上傳到OSS
- 使用SDK創建(提交)作業
- 查看結果
1. 作業準備
本作業是統計一個日誌文件中“INFO”,”WARN”,”ERROR”,”DEBUG”出現的次數。
該作業包含3個任務: split, count 和 merge:
- split 任務會把日誌文件分成 3 份。
- count 任務會統計每份日誌文件中“INFO”,”WARN”,”ERROR”,”DEBUG”出現的次數 (count 任務需要配置InstanceCount為3,表示同時啟動3台機器運行個 count 程序)。
- merge 任務會把 count 任務的結果統一合並起來。
DAG圖例:
(1) 上傳數據文件到OSS
下載本例子所需的數據: log-count-data.txt
將 log-count-data.txt 上傳到:
oss://your-bucket/log-count/log-count-data.txt
- your-bucket如表示您自己創建的bucket,本例子假設region為: cn-shenzhen.
- 如何上傳到OSS,請參考OSS上傳文檔。
(2) 使用示例代碼
這裏我們將采用Java來編寫作業任務,使用maven來編譯,推薦使用IDEA:https://www.jetbrains.com/idea/download/ 選擇Community版本(免費).
示例程序下載:java-log-count.zip
這是一個maven工程。
- 注意:無需修改代碼。
(3) 編譯打包
運行命令編譯打包:
mvn package
即可在target得到下麵3個jar包:
batchcompute-job-log-count-1.0-SNAPSHOT-Split.jar
batchcompute-job-log-count-1.0-SNAPSHOT-Count.jar
batchcompute-job-log-count-1.0-SNAPSHOT-Merge.jar
再將3個jar包,打成一個tar.gz壓縮包,命令如下:
> cd target #進入target目錄
> tar -czf worker.tar.gz *SNAPSHOT-*.jar #打包
運行以下命令,查看包的內容是否正確:
> tar -tvf worker.tar.gz
batchcompute-job-log-count-1.0-SNAPSHOT-Split.jar
batchcompute-job-log-count-1.0-SNAPSHOT-Count.jar
batchcompute-job-log-count-1.0-SNAPSHOT-Merge.jar
- 注意:BatchCompute 隻支持以 tar.gz 為後綴的壓縮包, 請注意務必用以上方式(gzip)打包, 否則將會無法解析。
(4) 上傳到OSS
本例將 worke.tar.gz 上傳到 OSS 的 your-bucket 中:
oss://your-bucket/log-count/worker.tar.gz
- 如要運行本例子,您需要創建自己的bucket,並且把worker.tar.gz文件上傳至您自己創建的bucket的路徑下。
2. 使用SDK創建(提交)作業
(1) 新建一個maven工程
在pom.xml中增加以下dependencies:
<dependencies>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-batchcompute</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
(2) 新建一個java類: Demo.java
提交作業需要指定集群ID或者使用匿名集群參數。本例子使用匿名集群方式進行。匿名集群需要配置2個參數, 其中:
在 OSS 中創建存儲StdoutRedirectPath(程序輸出結果)和StderrRedirectPath(錯誤日誌)的文件路徑,本例中創建的路徑為
oss://your-bucket/log-count/logs/
- 如需運行本例子,請按照上文所述的變量獲取以及與上文對應的您的OSS路徑對程序中注釋中的變量進行修改。
Java SDK 提交程序模板如下,程序中具體參數含義請參照 SDK接口說明。
Demo.java:
/*
* IMAGE_ID:ECS鏡像,由上文所述獲取
* INSTANCE_TYPE: 實例類型,由上文所述獲取
* REGION_ID:區域為青島/杭州,目前隻有青島開通,此項需與上文OSS存儲worker的bucket地域一致
* ACCESS_KEY_ID: AccessKeyId可以由上文所述獲取
* ACCESS_KEY_SECRET: AccessKeySecret可以由上文所述獲取
* WORKER_PATH:由上文所述打包上傳的worker的OSS存儲路徑
* LOG_PATH:錯誤反饋和task輸出的存儲路徑,logs文件需事先自行創建
*/
import com.aliyuncs.batchcompute.main.v20151111.*;
import com.aliyuncs.batchcompute.model.v20151111.*;
import com.aliyuncs.batchcompute.pojo.v20151111.*;
import com.aliyuncs.exceptions.ClientException;
import java.util.ArrayList;
import java.util.List;
public class Demo {
static String IMAGE_ID = "img-ubuntu";; //這裏填寫您的 ECS 鏡像ID
static String INSTANCE_TYPE = "bcs.a2.large"; //根據region填寫合適的InstanceType
static String REGION_ID = "cn-shenzhen"; //這裏填寫region
static String ACCESS_KEY_ID = ""; //"your-AccessKeyId"; 這裏填寫您的AccessKeyId
static String ACCESS_KEY_SECRET = ""; //"your-AccessKeySecret"; 這裏填寫您的AccessKeySecret
static String WORKER_PATH = ""; //"oss://your-bucket/log-count/worker.tar.gz"; // 這裏填寫您上傳的worker.tar.gz的OSS存儲路徑
static String LOG_PATH = ""; // "oss://your-bucket/log-count/logs/"; // 這裏填寫您創建的錯誤反饋和task輸出的OSS存儲路徑
static String MOUNT_PATH = ""; // "oss://your-bucket/log-count/";
public static void main(String[] args){
/** 構造 BatchCompute 客戶端 */
BatchCompute client = new BatchComputeClient(REGION_ID, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
try{
/** 構造 Job 對象 */
JobDescription jobDescription = genJobDescription();
//創建Job
CreateJobResponse response = client.createJob(jobDescription);
//創建成功後,返回jobId
String jobId = response.getJobId();
System.out.println("Job created success, got jobId: "+jobId);
//查詢job狀態
GetJobResponse getJobResponse = client.getJob(jobId);
Job job = getJobResponse.getJob();
System.out.println("Job state:"+job.getState());
} catch (ClientException e) {
e.printStackTrace();
System.out.println("Job created failed, errorCode:"+ e.getErrCode()+", errorMessage:"+e.getErrMsg());
}
}
private static JobDescription genJobDescription(){
JobDescription jobDescription = new JobDescription();
jobDescription.setName("java-log-count");
jobDescription.setPriority(0);
jobDescription.setDescription("log-count demo");
jobDescription.setJobFailOnInstanceFail(true);
jobDescription.setType("DAG");
DAG taskDag = new DAG();
/** 添加 split task */
TaskDescription splitTask = genTaskDescription();
splitTask.setTaskName("split");
splitTask.setInstanceCount(1);
splitTask.getParameters().getCommand().setCommandLine("java -jar batchcompute-job-log-count-1.0-SNAPSHOT-Split.jar");
taskDag.addTask(splitTask);
/** 添加 count task */
TaskDescription countTask = genTaskDescription();
countTask.setTaskName("count");
countTask.setInstanceCount(3);
countTask.getParameters().getCommand().setCommandLine("java -jar batchcompute-job-log-count-1.0-SNAPSHOT-Count.jar");
taskDag.addTask(countTask);
/** 添加 merge task */
TaskDescription mergeTask = genTaskDescription();
mergeTask.setTaskName("merge");
mergeTask.setInstanceCount(1);
mergeTask.getParameters().getCommand().setCommandLine("java -jar batchcompute-job-log-count-1.0-SNAPSHOT-Merge.jar");
taskDag.addTask(mergeTask);
/** 添加Task依賴: split-->count-->merge */
List<String> taskNameTargets = new ArrayList();
taskNameTargets.add("merge");
taskDag.addDependencies("count", taskNameTargets);
List<String> taskNameTargets2 = new ArrayList();
taskNameTargets2.add("count");
taskDag.addDependencies("split", taskNameTargets2);
//dag
jobDescription.setDag(taskDag);
return jobDescription;
}
private static TaskDescription genTaskDescription(){
AutoCluster autoCluster = new AutoCluster();
autoCluster.setInstanceType(INSTANCE_TYPE);
autoCluster.setImageId(IMAGE_ID);
//autoCluster.setResourceType("OnDemand");
TaskDescription task = new TaskDescription();
//task.setTaskName("Find");
//打包上傳的作業的OSS全路徑
Parameters p = new Parameters();
Command cmd = new Command();
//cmd.setCommandLine("");
//打包上傳的作業的OSS全路徑
cmd.setPackagePath(WORKER_PATH);
p.setCommand(cmd);
//錯誤反饋存儲路徑
p.setStderrRedirectPath(LOG_PATH);
//最終結果輸出存儲路
p.setStdoutRedirectPath(LOG_PATH);
task.setParameters(p);
task.addInputMapping(MOUNT_PATH, "/home/input");
task.addOutputMapping("/home/output",MOUNT_PATH);
task.setAutoCluster(autoCluster);
//task.setClusterId(clusterId);
task.setTimeout(30000); /* 30000 秒*/
task.setInstanceCount(1); /** 使用1個實例來運行 */
return task;
}
}
正常輸出樣例:
Job created success, got jobId: job-01010100010192397211
Job state:Waiting
3. 查看結果
您可以登錄batchcompute控製台查看job狀態。
Job運行結束,您可以登錄OSS控製台 查看your-bucket 這個bucket下麵的這個文件:/log-count/merge_result.json。
內容應該如下:
{"INFO": 2460, "WARN": 2448, "DEBUG": 2509, "ERROR": 2583}
最後更新:2016-12-05 17:29:54
上一篇:
命令行快速開始2__快速入門_批量計算-阿裏雲
下一篇:
Python快速開始__快速入門_批量計算-阿裏雲
經典網絡專線接入__使用金融雲產品_金融雲-阿裏雲
產品規則__產品簡介_郵件推送-阿裏雲
查詢堆棧信息__堆棧相關接口_API 文檔_資源編排-阿裏雲
MQ 快速入門__視頻教程_消息隊列 MQ-阿裏雲
設備注冊__接口列表_服務器端API_阿裏雲物聯網套件-阿裏雲
編輯賬號信息__賬號管理類 API_Open API 參考_企業級分布式應用服務 EDAS-阿裏雲
獲取所有發布信息__發布管理相關接口_Open API_消息隊列 MQ-阿裏雲
應用管理類__應用操作接口_API參考手冊_開放搜索-阿裏雲
Open API 簡介__Open API 參考_企業級分布式應用服務 EDAS-阿裏雲
恢複直播流推送__直播流操作接口_API 手冊_CDN-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲