すべてのプロダクト
Search
ドキュメントセンター

Batch Compute:ジョブの送信方法

最終更新日:Dec 28, 2024

このセクションでは、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 を入力します。

Step 1

  • ジョブをドラッグし、次のようにフィールドに入力します。ECS イメージ ID は イメージ から取得できます。

step 2

  • ジョブの送信 をクリックしてジョブを送信します。

  • ジョブが正常に送信されると、ページは自動的にジョブリストページにジャンプし、送信したジョブのステータスを表示できます。

  • しばらくお待ちください。ジョブの実行が完了すると、結果を表示できます。

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