このセクションでは、Batch Compute を使用してクラウド上で Python プログラム python test.py
を実行する方法など、お客様の質問について説明します。
python test.py:
print('Hello, cloud!')
まず、設定に基づいてマシンを申請するジョブを Batch Compute に送信します。次に、VM を起動し、VM 上で python test.py
を実行します。実行結果は自動的に OSS バケットにアップロードされます。実行結果は OSS バケットで確認できます。
1. ジョブは複数の方法で送信できます。以下に 4 つの方法を示します
1.1. コマンドラインツール(コマンド)を使用してジョブを送信する
bcs sub "python test.py" -p ./test.py
ジョブが送信されます。
このコマンドを実行すると、ファイル test.py が worker.tar.gz にパックされ、指定された場所にアップロードされてから、実行するジョブに送信されます。
bcs コマンドを実行するには、まず Batch Compute-cli ツールをインストールします。詳細については、こちらを参照してください。
bcs sub コマンド:
bcs sub <commandLine> [job_name] [options]
パラメーターの詳細を表示するには、bcs sub -h
を実行します。
1.2. コンソールを使用してジョブを送信する
詳細な手順は以下のとおりです:
1.2.1. test.py をパックして OSS にアップロードする
test.py のディレクトリで次のコマンドを実行します:
tar -czf worker.tar.gz test.py # test.py を worker.tar.gz にパックします。
OSS コンソールを使用して、worker.tar.gz を OSS バケットにアップロードします。
OSS サービスにサインアップしている必要があります。バケットを作成している必要があります。バケット名は mybucket とします。このバケットに test という名前のディレクトリを作成します。
ファイルを mybucket の test ディレクトリにアップロードするとします。OSS インスタンスのファイルパスは oss://mybucket/test/worker.tar.gz
になります。
1.2.2. コンソールを使用してジョブを送信する
ジョブの送信 ページに移動します。
プロンプトに従ってジョブ名 test_job を入力します。
ジョブをドラッグし、次のようにフィールドに入力します。ECS イメージ ID は イメージ から取得できます。
ジョブの送信 をクリックしてジョブを送信します。
ジョブが正常に送信されると、ページは自動的にジョブリストページにジャンプし、送信したジョブのステータスを表示できます。
しばらくお待ちください。ジョブの実行が完了すると、結果を表示できます。
1.3. Python SDK を使用してジョブを送信する
1.3.1. test.py をパックして OSS にアップロードする。
前のセクションと同じです。
1.3.2. ジョブを送信する。
from batchcompute import Client, ClientError
from batchcompute import CN_SHENZHEN as REGION
ACCESS_KEY_ID = 'your_access_key_id' // このパラメータを設定する必要があります。
ACCESS_KEY_SECRET = 'your_access_key_secret' // このパラメータを設定する必要があります。
job_desc = {
"Name": "my_job_name",
"Description": "hello test",
"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
....
Python SDK の詳細については、Python SDK を参照してください。
1.4. Java SDK を使用してジョブを送信する
1.4.1. test.py をパックして OSS にアップロードする。
前のセクションと同じです。
1.4.2. ジョブを送信する。
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 = ""; // このパラメータを設定する必要があります。
String ACCESS_KEY_SECRET = ""; // このパラメータを設定する必要があります。
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;
}
}
Java SDK の詳細については、Java SDK を参照してください。
2. Batch Compute の CommandLine:
CommandLine は Shell とは異なります。
プログラム + パラメーター
の形式のみをサポートします。たとえば、python test.py
やsh test.sh
などです。Shell を実行するには、
/bin/bash -c 'cd /home/xx/ && python a.py'
を実行します。Shell を test.sh などの SH スクリプトに書き込むには、
sh test.sh
を実行します。
CommandLine の場所:
コマンドラインツールの
bcs sub <cmd> [job_name] [options]
の cmd。Java SDK を使用する場合、
cmd.setCommandLine(cmd)
の cmd。Python SDK の
taskName.Parameters.Command.CommandLine
。