閱讀114 返回首頁    go windows


並發__操作指南_批量計算-阿裏雲

一個作業(Job)中可以有多個任務(Task),一個任務可以指定在多個實例(Instance)上運行程序。

如何並發?

請看下麵 job description json 例子:

  1. {
  2. "DAG": {
  3. ...
  4. "Tasks": {
  5. ...
  6. "count": {
  7. "InstanceCount": 3, //指定需要實例數:3台VM
  8. "LogMapping": {},
  9. "AutoCluster": {
  10. "ResourceType": "OnDemand",
  11. "ImageId": "img-ubuntu",
  12. "InstanceType": "bcs.a2.large"
  13. },
  14. "Parameters": {
  15. "Command": {
  16. "EnvVars": {},
  17. "CommandLine": "python count.py",
  18. "PackagePath": "oss://your-bucket/log-count/worker.tar.gz"
  19. },
  20. "InputMappingConfig": {
  21. "Lock": true
  22. },
  23. "StdoutRedirectPath": "oss://your-bucket/log-count/logs/",
  24. "StderrRedirectPath": "oss://your-bucket/log-count/logs/"
  25. },
  26. "OutputMapping": {},
  27. "MaxRetryCount": 0,
  28. "Timeout": 21600,
  29. "InputMapping": {}
  30. }
  31. }
  32. },
  33. "Description": "batchcompute job",
  34. "Priority": 0,
  35. "JobFailOnInstanceFail": true,
  36. "Type": "DAG",
  37. "Name": "log-count"
  38. }

任務count中配置了InstanceCount為3, 表示需要實例數3台, 即在3台VM上運行這個任務的程序。

並發處理不同片段的數據

3台VM上運行的任務程序都是一樣的,如何讓它處理不同的數據呢?

在任務程序中使用環境變量: BATCH_COMPUTE_DAG_INSTANCE_ID(實例ID) 來區分,可以處理不同片段的數據。

以下是 count.py 代碼片段:

  1. ...
  2. # instance_id: should start from 0
  3. instance_id = os.environ['BATCH_COMPUTE_DAG_INSTANCE_ID']
  4. ...
  5. filename = 'part_%s.txt' % instance_id
  6. ...
  7. # 1. download a part
  8. oss_tool.download_file('%s/%s/%s.txt' % (pre, split_results, instance_id ), filename)
  9. ...
  10. # 3. upload result to oss
  11. upload_to = '%s/count_results/%s.json' % (pre, instance_id )
  12. print('upload to %s' % upload_to)
  13. oss_tool.put_data(json.dumps(m), upload_to)
  14. ...

完整例子請看快速開始例子

最後更新:2016-12-05 17:50:28

  上一篇:go 多任務__操作指南_批量計算-阿裏雲
  下一篇:go 前言__Docker_操作指南_批量計算-阿裏雲