Bab ini menjelaskan cara menjalankan program Python Anda python test.py di cloud menggunakan Batch Compute.
python test.py:
print('Halo, cloud!')Pertama, kirim pekerjaan ke Batch Compute untuk mengajukan mesin berdasarkan konfigurasi Anda. Kemudian, VM akan dimulai dan menjalankan python test.py. Hasil proses tersebut secara otomatis diunggah ke Bucket OSS Anda. Anda dapat melihat hasilnya di Bucket OSS Anda.
1. Anda dapat mengirimkan pekerjaan dengan beberapa metode. Berikut ini menjelaskan empat metode
1.1. Gunakan alat baris perintah (CLI) untuk mengirimkan pekerjaan.
bcs sub "python test.py" -p ./test.pyPekerjaan telah dikirimkan.
Ketika perintah ini dijalankan, file test.py dikemas menjadi worker.tar.gz, diunggah ke lokasi yang ditentukan, lalu dikirimkan ke pekerjaan untuk dijalankan.
Untuk menjalankan perintah bcs, instal terlebih dahulu alat Batch Compute-cli. Untuk informasi lebih lanjut, lihat Di sini.
Perintah bcs sub:
bcs sub <commandLine> [job_name] [options]Untuk melihat detail parameter lebih lanjut, jalankan bcs sub -h.
1.2. Gunakan konsol untuk mengirimkan pekerjaan.
Langkah-langkah rinci adalah sebagai berikut:
1.2.1. Kemas dan unggah test.py ke OSS.
Jalankan perintah berikut di direktori test.py:
tar -czf worker.tar.gz test.py # Mengemas test.py menjadi worker.tar.gz.Gunakan konsol OSS untuk mengunggah worker.tar.gz ke Bucket OSS Anda.
Jika Anda belum mendaftarkan layanan OSS, pastikan Anda sudah membuat bucket. Anggaplah nama bucket adalah mybucket. Buat direktori bernama test di dalam bucket ini.
Anggaplah Anda mengunggah file ke direktori test di mybucket. Maka jalur file di instance OSS Anda adalah oss://mybucket/test/worker.tar.gz.
1.2.2. Gunakan konsol untuk mengirimkan pekerjaan.
Pergi ke halaman Kirim Pekerjaan.
Masukkan nama pekerjaan test_job sesuai prompt.

Seret pekerjaan dan masukkan bidang berikut. ID Citra ECS dapat diperoleh dari Citra.

Klik Kirim Pekerjaan untuk mengirimkan pekerjaan.
Setelah pekerjaan berhasil dikirimkan, halaman secara otomatis beralih ke halaman Daftar Pekerjaan di mana Anda dapat melihat status pekerjaan yang Anda kirimkan.
Tunggu sejenak. Anda dapat melihat hasilnya setelah pekerjaan selesai dijalankan.
1.3. Gunakan Python SDK untuk mengirimkan pekerjaan.
1.3.1. Kemas dan unggah test.py ke OSS.
Sama seperti bagian sebelumnya.
1.3.2. Kirimkan pekerjaan.
from batchcompute import Client, ClientError
from batchcompute import CN_SHENZHEN as REGION
ACCESS_KEY_ID = 'your_access_key_id' #Parameter ini perlu dikonfigurasi.
ACCESS_KEY_SECRET = 'your_access_key_secret' #Parameter ini perlu dikonfigurasi.
job_desc = {
"Name": "my_job_name",
"Description": "halo tes",
"JobFailOnInstanceFail": true,
"Priority": 0,
"Type": "DAG",
"DAG": {
"Tasks": {
"test": {
"InstanceCount": 1,
"MaxRetryCount": 0,
"Parameters": {
"Command": {
"CommandLine": "python test.py",
"PackagePath": "oss://mybucket/test/worker.tar.gz"
},
"StderrRedirectPath": "oss://mybucket/test/logs/",
"StdoutRedirectPath": "oss://mybucket/test/logs/"
},
"Timeout": 21600,
"AutoCluster": {
"InstanceType": "ecs.sn1.medium",
"ImageId": "img-ubuntu"
}
}
},
"Dependencies": {}
}
}
client = Client(REGION, ACCESS_KEY_ID, ACCESS_KEY_SECRET)
result = client.create_job(job_desc)
job_id = result.Id
....Untuk informasi lebih lanjut tentang Python SDK, lihat Python SDK.
1.4. Gunakan Java SDK untuk mengirimkan pekerjaan.
1.4.1. Kemas dan unggah test.py ke OSS.
Sama seperti bagian sebelumnya.
1.4.2. Kirimkan pekerjaan.
import com.aliyuncs.batchcompute.main.v20151111.*;
import com.aliyuncs.batchcompute.model.v20151111.*;
import com.aliyuncs.batchcompute.pojo.v20151111.*;
import com.aliyuncs.exceptions.ClientException;
public class SubmitJob{
String REGION = "cn-shenzhen";
String ACCESS_KEY_ID = ""; //Parameter ini perlu dikonfigurasi.
String ACCESS_KEY_SECRET = ""; //Parameter ini perlu dikonfigurasi.
public static void main(String[] args) throws ClientException{
JobDescription desc = new SubmitJob().getJobDesc();
BatchCompute client = new BatchComputeClient(REGION, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
CreateJobResponse res = client.createJob(desc);
String jobId = res.getJobId();
//...
}
private JobDescription getJobDesc() {
JobDescription desc = new JobDescription();
desc.setName("testJob");
desc.setPriority(1);
desc.setDescription("JAVA SDK TEST");
desc.setType("DAG");
desc.setJobFailOnInstanceFail(true);
DAG dag = new DAG();
dag.addTask(getTaskDesc());
desc.setDag(dag);
return desc;
}
private TaskDescription getTaskDesc() {
TaskDescription task = new TaskDescription();
task.setClusterId(gClusterId);
task.setInstanceCount(1);
task.setMaxRetryCount(0);
task.setTaskName("test");
task.setTimeout(10000);
AutoCluster autoCluster = new AutoCluster();
autoCluster.setImageId("img-ubuntu");
autoCluster.setInstanceType("ecs.sn1.medium");
// autoCluster.setResourceType("OnDemand");
task.setAutoCluster(autoCluster);
Parameters parameters = new Parameters();
Command cmd = new Command();
cmd.setCommandLine("python test.py");
// cmd.addEnvVars("a", "b");
cmd.setPackagePath("oss://mybucket/test/worker.tar.gz");
parameters.setCommand(cmd);
parameters.setStderrRedirectPath("oss://mybucket/test/logs/");
parameters.setStdoutRedirectPath("oss://mybucket/test/logs/");
// InputMappingConfig input = new InputMappingConfig();
// input.setLocale("GBK");
// input.setLock(true);
// parameters.setInputMappingConfig(input);
task.setParameters(parameters);
// task.addInputMapping("oss://my-bucket/disk1/", "/home/admin/disk1/");
// task.addOutputtMapping("/home/admin/disk2/", "oss://my-bucket/disk2/");
// task.addLogMapping( "/home/admin/a.log","oss://my-bucket/a.log");
return task;
}
}Untuk informasi lebih lanjut tentang Java SDK, lihat Java SDK.
2. CommandLine di Batch Compute:
CommandLine berbeda dari Shell. Ini hanya mendukung bentuk
program + parameter, misalnya,python test.pyataush test.sh.Untuk menjalankan Shell, jalankan
/bin/bash -c 'cd /home/xx/ && python a.py'.Untuk menulis Shell ke skrip SH seperti test.sh, jalankan
sh test.sh.
CommandLine Location:
cmd dari
bcs sub <cmd> [job_name] [options]di alat baris perintah.Ketika Java SDK digunakan, cmd di
cmd.setCommandLine(cmd).taskName.Parameters.Command.CommandLinedi Python SDK.