Bagian ini menjelaskan cara menggunakan Java SDK untuk mengirimkan pekerjaan yang bertujuan menghitung jumlah kemunculan INFO, WARN, ERROR, dan DEBUG dalam file log.
Prosedur
Persiapkan pekerjaan.
Unggah file data ke Object Storage Service (OSS).
Gunakan kode contoh.
Kompilasi dan kemas kode.
Unggah paket ke OSS.
Gunakan SDK untuk membuat (mengirimkan) pekerjaan.
Periksa hasilnya.
1. Persiapkan pekerjaan
Pekerjaan ini bertujuan untuk menghitung jumlah kemunculan INFO, WARN, ERROR, dan DEBUG dalam file log.
Pekerjaan mencakup tugas-tugas berikut:
Tugas pemisahan digunakan untuk membagi file log menjadi tiga bagian.
Tugas penghitungan digunakan untuk menghitung jumlah kemunculan INFO, WARN, ERROR, dan DEBUG di setiap bagian file log. Dalam tugas penghitungan, InstanceCount harus diatur ke 3, menunjukkan bahwa tiga tugas penghitungan dimulai secara bersamaan.
Tugas penggabungan digunakan untuk menggabungkan semua hasil penghitungan.
DAG

1.1. Unggah file data ke OSS
Unduh file data yang digunakan dalam contoh ini: log-count-data.txt.
Unggah file log-count-data.txt ke oss://<your-bucket>/log-count/log-count-data.txt.
Ganti <your-bucket> dengan nama bucket yang Anda buat sendiri. Contoh ini menggunakan wilayah cn-shenzhen.
1.2. Gunakan kode contoh
Java digunakan untuk mengompilasi tugas-tugas pekerjaan, khususnya Maven untuk kompilasi. Kami merekomendasikan penggunaan IDEA, dan Anda dapat mengunduh versi Community gratis dari IDEA di https://www.jetbrains.com/idea/download/.
Unduh program contoh: java-log-count.zip.
Ini adalah proyek Maven.
Anda tidak perlu memodifikasi kode.
1.3. Kompilasi dan kemas kode
Jalankan perintah berikut untuk mengompilasi dan mengemas kode:
mvn packagePaket .jar berikut diperoleh di direktori target:
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.jarJalankan perintah berikut untuk mengemas ketiga paket .jar menjadi file tar.gz:
> cd target # Beralih ke direktori target.
> tar -czf worker.tar.gz *SNAPSHOT-*.jar # Kemas paket .jar.Jalankan perintah berikut untuk memeriksa apakah isi paket sudah benar:
> 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.jarBatch Compute hanya mendukung paket terkompresi dengan ekstensi tar.gz. Pastikan Anda menggunakan metode pengemasan gzip. Jika tidak, paket tidak dapat diuraikan.
1.4. Unggah paket ke OSS
Dalam contoh ini, unggah worker.tar.gz ke oss://<your-bucket>/log-count/worker.tar.gz.
Untuk menjalankan pekerjaan dalam contoh ini, Anda harus membuat bucket Anda sendiri. Selain itu, unggah worker.tar.gz ke jalur bucket Anda sendiri.
2. Gunakan SDK untuk membuat (mengirimkan) pekerjaan
2.1. Buat proyek Maven
Tambahkan dependensi berikut ke pom.xml:
<dependencies>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-batchcompute</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.2.3</version>
</dependency>
</dependencies>Pastikan SDK versi terbaru digunakan. Untuk informasi lebih lanjut, lihat Unduh dan instal.
2.2. Buat kelas Java: Demo.java
Saat mengirimkan pekerjaan, Anda harus menentukan ID kluster atau menggunakan parameter AutoCluster.
Dalam contoh ini, parameter AutoCluster digunakan. Anda harus mengonfigurasi parameter berikut untuk AutoCluster:
ID gambar yang tersedia. Anda dapat menggunakan gambar yang disediakan oleh sistem atau gambar kustom.
InstanceType. Untuk informasi lebih lanjut tentang jenis instans yang tersedia, lihat Jenis instans yang saat ini didukung.
Buat jalur untuk menyimpan StdoutRedirectPath (keluaran program) dan StderrRedirectPath (log kesalahan) di OSS. Dalam contoh ini, jalur yang dibuat adalah oss://your-bucket/log-count/logs/.
Untuk menjalankan program dalam contoh ini, modifikasi variabel dengan komentar dalam program berdasarkan variabel yang dijelaskan sebelumnya dan variabel jalur OSS.
Berikut ini adalah contoh program yang menggunakan Java SDK untuk mengirimkan pekerjaan. Untuk makna spesifik dari parameter dalam program, lihat Deskripsi antarmuka SDK.
Demo.java:
/*
* IMAGE_ID: Citra ECS. Dapat diperoleh sesuai dengan deskripsi sebelumnya.
* INSTANCE_TYPE: Jenis instans. Dapat diperoleh sesuai dengan deskripsi sebelumnya.
* REGION_ID: Wilayah Qingdao atau Hangzhou. Saat ini, layanan Batch Compute hanya tersedia di Qingdao. Wilayah harus sesuai dengan wilayah bucket yang digunakan untuk menyimpan worker.tar.gz di OSS.
* ACCESS_KEY_ID: AccessKeyID dapat diperoleh sesuai dengan deskripsi sebelumnya.
* ACCESS_KEY_SECRET: AccessKeySecret dapat diperoleh sesuai dengan deskripsi sebelumnya.
* WORKER_PATH: Jalur penyimpanan OSS tempat worker.tar.gz dikemas dan diunggah.
* LOG_PATH: Jalur penyimpanan umpan balik kesalahan dan keluaran tugas.
*/
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";; //Masukkan ID citra ECS
static String INSTANCE_TYPE = "ecs.sn1.medium"; //Masukkan jenis instans yang sesuai berdasarkan wilayah
static String REGION_ID = "cn-shenzhen"; //Masukkan wilayah
static String ACCESS_KEY_ID = ""; //"your-AccessKeyId"; Masukkan AccessKeyID Anda
static String ACCESS_KEY_SECRET = ""; //"your-AccessKeySecret"; Masukkan AccessKeySecret Anda
static String WORKER_PATH = ""; //"oss://your-bucket/log-count/worker.tar.gz"; // Masukkan jalur penyimpanan OSS tempat worker.tar.gz diunggah
static String LOG_PATH = ""; // "oss://your-bucket/log-count/logs/"; // Masukkan jalur penyimpanan OSS untuk umpan balik kesalahan dan keluaran tugas
static String MOUNT_PATH = ""; // "oss://your-bucket/log-count/";
public static void main(String[] args){
/** Konstruksi klien BatchCompute */
BatchCompute client = new BatchComputeClient(REGION_ID, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
try{
/** Konstruksi objek pekerjaan */
JobDescription jobDescription = genJobDescription();
// Buat pekerjaan
CreateJobResponse response = client.createJob(jobDescription);
//Setelah pembuatan berhasil, jobId dikembalikan
String jobId = response.getJobId();
System.out.println("Pekerjaan berhasil dibuat, jobId diperoleh: "+jobId);
//Kueri status pekerjaan
GetJobResponse getJobResponse = client.getJob(jobId);
Job job = getJobResponse.getJob();
System.out.println("Status pekerjaan:"+job.getState());
} catch (ClientException e) {
e.printStackTrace();
System.out.println("Pekerjaan gagal dibuat, errorCode:"+ e.getErrCode()+", errorMessage:"+e.getErrMsg());
}
}
private static JobDescription genJobDescription(){
JobDescription jobDescription = new JobDescription();
jobDescription.setName("java-log-count");
jobDescription.setPriority(0);
jobDescription.setDescription("demo log-count");
jobDescription.setJobFailOnInstanceFail(true);
jobDescription.setType("DAG");
DAG taskDag = new DAG();
/** Tambahkan tugas pemisahan */
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);
/** Tambahkan tugas penghitungan */
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);
/** Tambahkan tugas penggabungan */
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);
/** Tambahkan dependensi tugas: 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");
//Jika instans VPC digunakan, konfigurasikan blok CIDR dan hindari konflik blok CIDR apa pun
Configs configs = new Configs();
Networks networks = new Networks();
VPC vpc = new VPC();
vpc.setCidrBlock("192.168.0.0/16");
networks.setVpc(vpc);
configs.setNetworks(networks);
autoCluster.setConfigs(configs);
//Jalur OSS lengkap pekerjaan untuk pengemasan dan pengunggahan
Parameters p = new Parameters();
Command cmd = new Command();
//cmd.setCommandLine("");
//Jalur OSS lengkap pekerjaan untuk pengemasan dan pengunggahan
cmd.setPackagePath(WORKER_PATH);
p.setCommand(cmd);
//Jalur penyimpanan umpan balik kesalahan
p.setStderrRedirectPath(LOG_PATH);
//Jalur penyimpanan hasil akhir
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 detik*/
task.setInstanceCount(1); /** Gunakan satu instans untuk menjalankan program */
return task;
}
}Contoh keluaran:
Pekerjaan berhasil dibuat, jobId diperoleh: job-01010100010192397211
Status pekerjaan:Menunggu3. Periksa status pekerjaan
Anda dapat melihat status pekerjaan dengan merujuk ke getJob.
//Kueri status pekerjaan
GetJobResponse getJobResponse = client.getJob(jobId);
Job job = getJobResponse.getJob();
System.out.println("Status pekerjaan:"+job.getState());Pekerjaan mungkin berada dalam salah satu status berikut: Menunggu, Berjalan, Selesai, Gagal, dan Dihentikan.
4. Periksa hasil eksekusi pekerjaan
Anda dapat melihat status pekerjaan dengan masuk ke Konsol Batch Compute.
Setelah pekerjaan selesai dijalankan, Anda dapat masuk ke Konsol OSS dan memeriksa file berikut di bawah your-bucket: /log-count/merge_result.json.
Hasil yang diharapkan adalah sebagai berikut:
{"INFO": 2460, "WARN": 2448, "DEBUG": 2509, "ERROR": 2583}Sebagai alternatif, Anda dapat menggunakan SDK OSS untuk memperoleh hasil.