All Products
Search
Document Center

Batch Compute (Deprecated):Panduan Cepat untuk Java SDK

Last Updated:Jul 06, 2025

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.

Penting

Anda tidak perlu memodifikasi kode.

1.3. Kompilasi dan kemas kode

Jalankan perintah berikut untuk mengompilasi dan mengemas kode:

mvn package

Paket .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.jar

Jalankan 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.jar
Penting

Batch 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:Menunggu

3. 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.