全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
批量计算

如何提交作业

更新时间:2017-08-22 10:19:44   分享:   

如何提交一个作业

A君: 我有一个python程序,我在本地可以这么运行:python test.py, 但是想要在云上运行怎么做?

test.py 内容如下:

  1. print('Hello, cloud!')

云上运行大致过程: 您提交一个作业到BatchCompute,BatchCompute会按照你提供的配置去申请机器,启动虚拟机,在虚拟机中运行: python test.py, 得到结果后自动上传到OSS中。然后您可以去OSS中查看运行的结果。

1. 提交作业的方法有很多,下面列举4种:

(1). 使用命令行(一条命令提交作业):

  1. bcs sub "python test.py" -p ./test.py

搞定!

  • 这条命令会将test.py文件打包成 worker.tar.gz 上传到指定位置,然后再提交作业运行。

  • bcs命令需要先安装 batchcompute-cli工具才能使用, 请看这里

  • bcs sub命令:
  1. bcs sub <commandLine> [job_name] [options]

更多参数详情可以通过”bcs sub -h”查看。

(2). 使用控制台提交作业:

下面列举详细解释步骤:

1). 将test.py打包上传到云端OSS

在test.py所在目录运行下面的命令:

  1. tar -czf worker.tar.gz test.py # 将 test.py 打包到 worker.tar.gz

然后使用OSS控制台将 worker.tar.gz 上传到OSS。

如果还没有开通OSS,请先开通.

还需要创建Bucket,假设创建了Bucket名称为 mybucket

然后在这个Bucket下创建一个目录: test

假设您上传到了mybucket这个Bucket下的test目录下,则OSS路径表示为: oss://mybucket/test/worker.tar.gz

2). 使用控制台提交作业

打开 提交作业页面。

  • 按照表单提示,填写作业名称: first_job

第1步

  • 拖拽一个任务,按照下图填写表单, 其中ECS镜像ID可以从这里获取: 镜像

第2步

  • 然后点击下面的”提交作业”按钮, 即可提交成功。

  • 提交成功后,自动跳转到作业列表页面,您可以在这里看到你提交的作业状态。

  • 等待片刻后作业运行完成,即可查看结果。

(3). 使用 Python SDK 提交作业

1) 将test.py打包上传到云端OSS

同上一节。

2) 提交作业

  1. from batchcompute import Client, ClientError
  2. from batchcompute import CN_SHENZHEN as REGION
  3. ACCESS_KEY_ID = 'your_access_key_id' #需要配置
  4. ACCESS_KEY_SECRET = 'your_access_key_secret' #需要配置
  5. job_desc = {
  6. "Name": "my_job_name",
  7. "Description": "hello test",
  8. "JobFailOnInstanceFail": true,
  9. "Priority": 0,
  10. "Type": "DAG",
  11. "DAG": {
  12. "Tasks": {
  13. "test": {
  14. "InstanceCount": 1,
  15. "MaxRetryCount": 0,
  16. "Parameters": {
  17. "Command": {
  18. "CommandLine": "python test.py",
  19. "PackagePath": "oss://mybucket/test/worker.tar.gz"
  20. },
  21. "StderrRedirectPath": "oss://mybucket/test/logs/",
  22. "StdoutRedirectPath": "oss://mybucket/test/logs/"
  23. },
  24. "Timeout": 21600,
  25. "AutoCluster": {
  26. "InstanceType": "bcs.a2.large",
  27. "ImageId": "img-ubuntu"
  28. }
  29. }
  30. },
  31. "Dependencies": {}
  32. }
  33. }
  34. client = Client(REGION, ACCESS_KEY_ID, ACCESS_KEY_SECRET)
  35. result = client.create_job(job_desc)
  36. job_id = result.Id
  37. ....

3) 更多关于Python SDK内容

请看 Python SDK

(4). 使用 Java SDK 提交作业

1) 将test.py打包上传到云端OSS

同上一节。

2) 提交作业

  1. import com.aliyuncs.batchcompute.main.v20151111.*;
  2. import com.aliyuncs.batchcompute.model.v20151111.*;
  3. import com.aliyuncs.batchcompute.pojo.v20151111.*;
  4. import com.aliyuncs.exceptions.ClientException;
  5. public class SubmitJob{
  6. String REGION = "cn-shenzhen";
  7. String ACCESS_KEY_ID = ""; //需要配置
  8. String ACCESS_KEY_SECRET = ""; //需要配置
  9. public static void main(String[] args) throws ClientException{
  10. JobDescription desc = new SubmitJob().getJobDesc();
  11. BatchCompute client = new BatchComputeClient(REGION, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
  12. CreateJobResponse res = client.createJob(desc);
  13. String jobId = res.getJobId();
  14. //...
  15. }
  16. private JobDescription getJobDesc() {
  17. JobDescription desc = new JobDescription();
  18. desc.setName("testJob");
  19. desc.setPriority(1);
  20. desc.setDescription("JAVA SDK TEST");
  21. desc.setType("DAG");
  22. desc.setJobFailOnInstanceFail(true);
  23. DAG dag = new DAG();
  24. dag.addTask(getTaskDesc());
  25. desc.setDag(dag);
  26. return desc;
  27. }
  28. private TaskDescription getTaskDesc() {
  29. TaskDescription task = new TaskDescription();
  30. task.setClusterId(gClusterId);
  31. task.setInstanceCount(1);
  32. task.setMaxRetryCount(0);
  33. task.setTaskName("test");
  34. task.setTimeout(10000);
  35. AutoCluster autoCluster = new AutoCluster();
  36. autoCluster.setImageId("img-ubuntu");
  37. autoCluster.setInstanceType("bcs.a2.large");
  38. // autoCluster.setResourceType("OnDemand");
  39. task.setAutoCluster(autoCluster);
  40. Parameters parameters = new Parameters();
  41. Command cmd = new Command();
  42. cmd.setCommandLine("python test.py");
  43. // cmd.addEnvVars("a", "b");
  44. cmd.setPackagePath("oss://mybucket/test/worker.tar.gz");
  45. parameters.setCommand(cmd);
  46. parameters.setStderrRedirectPath("oss://mybucket/test/logs/");
  47. parameters.setStdoutRedirectPath("oss://mybucket/test/logs/");
  48. // InputMappingConfig input = new InputMappingConfig();
  49. // input.setLocale("GBK");
  50. // input.setLock(true);
  51. // parameters.setInputMappingConfig(input);
  52. task.setParameters(parameters);
  53. // task.addInputMapping("oss://my-bucket/disk1/", "/home/admin/disk1/");
  54. // task.addOutputtMapping("/home/admin/disk2/", "oss://my-bucket/disk2/");
  55. // task.addLogMapping( "/home/admin/a.log","oss://my-bucket/a.log");
  56. return task;
  57. }
  58. }

3) 更多关于Java SDK内容

请看 Java SDK

2: 关于批量计算中的CommandLine:

  • CommandLine不等同于SHELL,仅支持”程序+参数”方式,比如”python test.py”或”sh test.sh”。
  • 如果你想要执行SHELL,可以使用”/bin/bash -c ‘cd /home/xx/ && python a.py’”
  • 或者将SHELL写到一个sh脚本中如:test.sh, 然后用”sh test.sh”执行。

CommandLine具体位置:

  • 命令行工具中 bcs sub <cmd> [job_name] [options] 的cmd.
  • 使用java sdk时 cmd.setCommandLine(cmd)中的cmd.
  • python sdk中的 taskName.Parameters.Command.CommandLine.
本文导读目录
本文导读目录
以上内容是否对您有帮助?