1. 类和常量
序号 | 名称 | 可序列化 | 描述 |
1. | Client | No | 与BatchCompute交互的客户端类型 |
2. | JobDescription | Yes | 描述用户作业的类 |
3. | TaskDag | Yes | 描述作业任务以及任务间互相之间依赖关系的类 |
4. | TaskDescription | Yes | 描述任务的类 |
5. | ResourceDescription | Yes | 描述任务对CPU, Memory资源需求的类 |
6. | Job | Yes | 描述给定作业当前状态信息的类 |
7. | Task | Yes | 描述给定的作业任务的当前状态信息的类 |
8. | Instance | Yes | 描述给定的任务实例当前状态信息的类 |
9. | Image | Yes | 描述给定镜像的信息的类 |
10. | CreateResponse | No | 创建新作业时Client返回的响应类 |
11. | GetResponse | No | 获取作业状态及作业描述时,Client返回的响应类 |
12. | ActionResponse | No | 对作业尽行开始、停止或者删除等操作时由Client返回的响应类 |
13. | ListResponse | No | 列举所有作业和镜像时,由Client返回的响应类 |
14. | CN_QINGDAO | No | 常量,BatchCompute的青岛endpoint |
15. | CN_SHENZHEN | No | 常量,BatchCompute的深圳endpoint |
1.1 关于类属性
除了Client类型,SDK中的大部分类型均具有各种属性。属性均可以通过其名称直接读取,例如,你可以通过如下代码获取作业ID:另外属性名与Python规范PEP8中类的命名方式保持一致(区别于类方法的命名规则),遵循CamelCase的拼写规则。
# job is a Job object.
job = ...
job_id = job.JobId
print(job_id)
另外,可以通过字典取值的方式获取属性,例如:
# job is a Job object.
job = ...
job_id = job['JobId']
print(job_id)
对于类
JobDescription
,TaskDag
,Task
,ResourceDescription
, 可以通过赋值的方式更改某个属性的值,例如:
from batchcompute import JobDescription
job_desc = JobDescription()
job_desc.JobName = 'find-prime'
对于类
JobDescription
,TaskDag
,TaskDescription
,ResourceDescription
, 可以通过字典的方式对类的属性进行赋值,例如:
from batchcompute import JobDescription
job_desc = JobDescription()
job_desc['JobId'] = 'find-prime'
1.2 关于可序列化
SDK中所有可序列化的类均从内部类型 Jsonizable 继承而来,以下是关于 Jsonizable 类型及其子类的描述。
参数说明:
Jsonizable 及其子类对象均可通过字典,Jsonizable 对象或者描述字典的JSON串初始化。 注意,在初始化 Jsonizable 对象及其子类时,会丢弃字典或者JSON串中所有不合法的属性描述信息。
参数 | 类型 | 描述 |
properties | dict, str, Jsonizable object | 属性描述信息 |
通过字典初始化
Jsonizable
类:
e.g.
from batchcompute import JobDescription
# A dict object.
properties = {
"JobName": "find-prime",
"JobTag": "Batchcompute"
}
jsonizable = JobDescription(properties)
print(jsonizable.JobName)
print(jsonizable.JobTag)
通过JSON字符串初始化
Jsonizable
类:
e.g.
from batchcompute import JobDescription
# A string jsonized from a dict object.
properties = '''{
"JobName": "find-prime",
"JobTag": "Batchcompute"
}'''
jsonizable = JobDescription(properties)
print(jsonizable.JobName)
print(jsonizable.JobTag)
通过相同类的对象初始化
Jsonizable
类:
e.g.
form batchcompute import JobDescription
# A JobDescription object.
jsonizable1 = JobDescription()
jsonizable1.JobName = 'find-prime'
jsonizable1.JobTag = 'Batchcompute'
jsonizable2 = JobDescription(jsonizable1)
print(jsonizable2.JobName)
print(jsonizable2.JobTag)
方法说明:
序号 | 方法名 | 描述 |
1. | update | 接受一个字典对象,更新类的部分属性,不合法的属性将被丢弃 |
2. | detail | 返回一个包含类属性的字典,如果属性为空将不被包含 |
3. | load | 接受一个字符串,该字符串是一个JSON化的字典,类的属性均被更新,不合法的属性会被丢弃 |
4. | dump | 返回一个字符串,内容JSON化的字典,包含所有类属性信息,如果属性为空将不被包含 |
5. | __str__ | 被print调用的内置函数,其内部调用了dump函数 |
1.3 关于响应类
所有的返回类(CreateResponse, GetResponse, ActionRespnse, ListResponse)均继承内部类型RawResponse。 以下描述适用于所有的RawResponse的子类。
属性说明:
属性 | 类型 | 描述 |
RequestId | str | Client的所有请求的识别码 |
StatusCode | int | Client的所有请求的状态码 |
e.g.
...
response = client.create_job(job_desc)
print response.RequestId
print response.StatusCode
2. Client 类
参数说明:
参数 | 类型 | 描述 |
endpoint | str | 可用的BatchCompute域名或region |
access_key_id | str | 用户的Aliyun access key id |
access_key_secret | str | 用户的Aliyun access key secret |
human_readable | bool | 是否格式化输出时间戳信息 |
e.g.
from batchcompute import Client, CN_QINGDAO
endpoint = CN_QINGDAO
access_key_id = ... # your_access_key_id
access_key_secret = ... # your_access_key_secret
client = Client(endpoint, access_key_id, access_key_secret, human_readabel=True)
# You can enjoy Batchcompute through this `client` now!
...
2.1 create_job
参数说明:
所有类型的参数将被转换为包含属性信息的字典对象。
参数 | 类型 | 描述 |
job_desc | JobDescription object, str, dict | Job的简单描述和Job对象中有各个任务的描述信息,以及各个任务之间的DAG依赖 |
返回值说明:
create_job 方法将返回一个CreateResponse对象, 以下是 CreateResponse 对象的属性, 可以通过 response.JobId 的方式获取新任务的ID。
属性 | 类型 | 描述 |
JobId | str | 新任务的任务ID |
e.g.
try:
# Init a Client object.
client = ...
# Refer to JobDescription class to have a look at how to create a new job description.
job_desc = JobDescription(...)
job = client.create_job(job_desc)
# Print out the job id.
print(job.JobId)
except ClientError, e:
print(e)
(1)JobDescription 类
参数说明:
参数 | 类型 | 描述 |
properties | dict, str, JobDescription object | 包含作业描述信息的对象 |
属性说明:
序号 | 属性 | 类型 | 描述 |
1. | JobName | str | 作业名称 |
2. | Priority | int | 优先级用一个[0,1000]范围内的整数指定。数值越高表示作业调度时的优先级越高 |
3. | Description | str | 作业的简短描述信息 |
4. | TaskDag | TaskDag object | Job对象中有各个任务的描述信息,以及各个任务之间的DAG依赖 |
e.g.
可以通过赋值一一设置作业的描述信息。
from batchcompute import JobDescription, TaskDag, ResourceDescription
# Refer to TaskDag class to have a look at how to create a TaskDag.
task_dag = ... # A TaskDag object.
job_desc = JobDescription()
job_desc.JobName = 'find-prime'
job_desc.JobTag = 'Batchcompute'
job_desc.TaskDag = task_dag
job_desc.Description = 'Batchcompute Python SDK'
job_desc.Priority = 100
print(job_desc)
# You can create a new job with this description now!
...
也可以通过dict或者dict的JSON串批量设置作业的描述信息。
from batchcompute import Jobdescription, Taskdescription, TaskDag, ResourceDescription
job_json = '''{
"JobName": "find-prime"
"JobTag": "Batchcompute",
"Priority": 0,
"TaskDag": {
"TaskDescMap": {
"Find": {
"PackageUri": "oss://your-bucket/batch_python_sdk/worker.tar.gz",
"ProgramName": "find_prime_worker.py",
"ProgramType": "python",
"InstanceCount": 1,
"ResourceDescription": {
"Cpu": 800,
"Memory": 2000
},
"EnvironmentVariables": {},
"ImageId": "img-xxxx",
"StdoutRedirectPath": "oss://your-bucket/batch_python_sdk/logs/",
"StderrRedirectPath": "oss://your-bucket/batch_python_sdk/logs/"
}
},
"Dependencies": {}
}
}'''
job_desc = JobDescription(job_json)
print job_desc.JobName
print job_desc.JobTag
print job_desc.TaskDag
print job_desc.Description
print job_desc.Priority
print job_desc
(2) TaskDag类型
参数说明:
参数 | 类型 | 描述 |
properties | dict, str, TaskDag object | 所有任务的映射以及任务间依赖关系的描述信息 |
属性说明:
序号 | 属性 | 类型 | 描述 |
1. | TaskDescMap | dict | 所有任务名与任务描述的映射信息 |
2. | Dependencies | dict | 所有任务间的依赖关系 |
方法说明 :
序号 | 方法 | 描述 |
1. | add_task | 增加一个任务 |
2. | get_task | 通过任务名获取任务信息 |
3. | delete_task | 删除某个任务 |
可以通过属性赋值的方式提供任务信息, 如下:
e.g.
# Refer to the TaskDescription class to have a look at how to create a new task.
find_task = ...
task_dag = TaskDag()
task_dag.TaskDescMap = {
'Find': find_task
}
task_dag.Dependencies = {}
也可以通过类方法来增加任务信息,如下:
e.g.
# Refer to the TaskDescription class to have a look at how to create a new task.
find_task = ...
task_dag = TaskDag()
task_dag.add_task(task_name='Find', task=find_task)
task_dag.Dependencies = {}
(3) TaskDescription 类
参数说明:
参数 | 类型 | 描述 |
properties | dict, str, TaskDescription object | 单个任务的描述信息 |
属性说明:
序号 | 属性 | 类型 | 描述 |
1. | PackageUri | str | 用户的可执行程序包路径,应该是一个OSS路径。 |
2. | ProgramName | str | 当前task对应的需要执行的用户的主程序名称 |
3. | ProgramType | str | 用户程序的类型, 现阶段仅支持python、php两种,近期将支持java |
4. | ProgramArguments | str | 用户程序的命令行参数 |
5. | ImageId | str | 作业使用的镜像ID,可以通过list_images()获取 |
6. | InstanceCount | str | 任务中实例的个数,正数 |
7. | Timeout | int | 设置任务中的一个实例的最长执行时间(超时时间),范围为[1,86400],单位为秒。 |
8. | EnvironmentVariables | dict | 环境变量 |
9. | StdoutRedirectPath | str | 用户程序标准输出路径 |
10. | StderrRedirectPath | str | 用户程序标注出错路径 |
11. | ResourceDescription | ResourceDescription object | 任务资源需求描述信息 |
12. | OssMapping | dict | NFS挂载功能从OSS存储到本地磁盘的映射关系描述 |
13. | OssMappingLock | bool | 布尔型变量,用来确定NFS挂载服务是否支持网络文件锁。如果设置为true,则会开启网络锁服务,为文件锁提供后端支持 |
14. | OssMappingLocale | str | OSS上的Object统一采用UTF-8编码命名,这个参数可以决定挂载后使用的本地字符集。 |
e.g.
find_task = TaskDescription()
# Refer to the ResourceDescription class to have a look at how to create a resource description.
# Default set cpu needs to 800 and memory needs to 2000.
resource = ResourceDescription()
find_task.PackageUri = 'oss://your-bucket/batch-python-sdk/worker.tar.gz'
find_task.ProgramName = 'find_prime_worker.py'
find_task.ProgramType = 'python'
find_task.Priority = 0
find_task.ImageId = 'img-xxxx'
find_task.InstanceCount = 1
find_task.EnvironmentVariables = {}
find_task.StdoutRedirectPath = 'oss://your-bucket/batch-python-sdk/logs/'
find_task.StderrRedirectPath = 'oss://your-bucket/batch-python-sdk/logs/'
find_task.ResourceDescription = resource
# You can now add this task description to a TaskDag object through its add_task method.
(4) ResourceDescription 类
参数说明:
参数 | 类型 | 描述 |
properties | dict, str, ResourceDescription | 资源需求描述信息 |
属性说明:
序号 | 属性 | 类型 | 描述 |
1. | Cpu | int | 单个实例所耗 CPU,100 对应 1 个 CPU,范围为[800,2400] |
2. | Memory | int | 单个实例所需内存,单位 MB,范围为[2000,65536] |
e.g.
resource = ResourceDescription()
resource.Cpu = 16
resource.Memory = 2000
# You can add this description to a task description now.
...
2.2 get_job_description
参数说明:
参数 | 类型 | 描述 |
job | CreateResponse, str | 作业ID |
返回值说明:
get_job_description方法返回一个GetResponse对象,封装了JobDescription对象的所有接口和属性。 请参阅上节中JobDescription类的描述,了解JobDescription对象的属性.
e.g.
try:
# Get a Client object.
client = Client(...
...
# Job ID.
job = 'job-xxxx'
# Get job description, it returns a GetResponse object.
# You can use job_desc just like a JobDescription object.
job_desc = client.get_job_description(job)
print(job_desc.JobName, job_desc.TaskDag, job_desc.Priority)
except ClientError, e:
print(e)
2.3 update_job_priority
当作业的状态为Stopped和Failed才可以调用该接口。
参数说明:
参数 | 类型 | 描述 |
job | CreateResponse object, str | 作业ID |
priority | int | 作业优先级, [0,1000]范围内的整数指定, 优先级数值越高表示作业调度时的优先级越高 |
返回值说明:
update_job_priority 方法将返回一个 ActionResponse 对象, ActionResponse仅提供了request ID和状态码两个属性。
e.g.
try:
# Get a Client object.
client = Client(...
...
# Job ID.
job = 'job-xxxx'
new_priority = 200
# Get run-time infromation of the job.
job_detail = client.get_job(job)
if job_detail.State == 'Stopped':
# Only the priority of a stopped job can be modified.
client.update_job_priority(job, new_priority)
job_detail = client.get_job(job)
assert job_detail.Priority == new_priority
except ClientError, e:
print(e)
2.4 stop_job
当作业的状态为Waiting或Running,才可以调用该接口。
参数说明:
属性 | 类型 | 描述 |
job | CreateResponse, str | 作业ID |
返回值说明:
stop_job方法将返回一个 ActionResponse 对象, ActionResponse仅提供了request ID和状态码两个属性。
e.g.
try:
# Get a Client object.
client = Client(...
...
# Job ID.
job = 'job-xxxx'
job_detail = client.get_job(job)
if job_detail.State in ['Waiting', 'Running']:
# Only running or waiting jobs can be stopped.
client.stop_job(job)
job_detail = client.get_job(job)
assert job_detail.State == 'Stopped'
except ClientError, e:
print(e)
2.5 start_job
当作业的状态为Stopped或者Failed,才可以调用该接口。
当 Failed 状态的作业重启之后,已经运行成功的 Instance 不会重新运行。
参数说明:
属性 | 类型 | 描述 |
job | CreateResponse, str | 作业ID |
返回值说明:
start_job方法将返回一个 ActionResponse 对象, ActionResponse仅提供了request ID和状态码两个属性。
e.g.
try:
# Get a Client object.
client = Client(...
...
# Job ID.
job = 'job-xxxx'
job_detail = client.get_job(job)
if job_detail.State == 'Stopped':
# Only stopped job can be restarted.
client.start_job(job)
job_detail = client.get_job(job)
assert job_detail.State in ['Waiting', 'Running']
except ClientError, e:
print(e)
2.6 delete_job
当作业的状态为Stopped,Terminated或Failed,才可以调用该接口。
参数说明:
属性 | 类型 | 描述 |
job | CreateResponse, str | 作业ID |
返回值说明:
delete_job方法将返回一个 ActionResponse 对象, ActionResponse仅提供了request ID和状态码两个属性。
e.g.
try:
# Get a Client object.
client = Client(...
...
# Job ID.
job = 'job-xxxx'
client.delete_job(job)
except ClientError, e:
print(e)
2.7 get_job
参数说明:
属性 | 类型 | 描述 |
job | CreateResponse, str | 作业ID |
返回值说明:
get_job方法返回一个 GetResponse 对象,它封装了 Job 对象的所有接口和属性 。 请参阅Job类的描述,了解Job对象的属性。
e.g.
try:
# Get a Client object.
client = Client(...
...
job = 'job-xxxx'
# Get job run-time information, it returns a GetResponse object.
# You can use job_detail just like a Job object.
job_detail = client.get_job(job)
print(job_detail.State)
...
except ClientError, e:
print(e)
(1) Job 类
参数说明:
参数 | 类型 | 描述 |
properties | dict, str, TaskDag | 作业的当前状态信息 |
属性说明:
序号 | 属性 | 类型 | 描述 |
1. | JobId | str | 作业ID |
2. | JobName | str | 作业名称 |
3. | Description | str | 作业的简要描述 |
4. | Priority | int | 作业优先级 |
5. | State | str | 作业的运行状态 |
6. | OwnerId | int | owner用户账号的阿里云ID |
7. | CreateTime | int | 作业的创建时间,单位:秒 |
8. | StartTime | int | 作业的开始时间,单位:秒, 如果还在Waiting状态,则为0 |
9. | EndTime | int | 作业的结束时间,单位:秒, 如果还没结束,则为0 |
10. | NumTotalTask | int | 作业的任务总数 |
11. | NumFinishedTask | int | 运行完成的任务总数 |
12. | NumFailedTask | int | 运行失败的任务总数 |
13. | NumWaitingTask | int | 等待中的任务数 |
14. | NumRunningTask | int | 运行中的任务数 |
15. | NumStoppedTask | int | 停止的任务数 |
16. | NumTotalInstance | int | 作业的实例总数 |
17. | NumFinishedInstance | int | 运行完成的实例总数 |
18. | NumFailedInstance | int | 运行失败的实例总数 |
19. | NumWaitingInstance | int | 等待中的实例总数 |
20. | NumRunningInstance | int | 运行中的实例总数 |
21. | NumStoppedInstance | int | 停止的实例总数 |
2.8 list_jobs
返回值说明:
list_jobs方法返回一个 ListResponse 对象, 是Job对象的集合,可以像使用list对象一样使用它。 请参阅上节中Job类的描述,了解Job对象的属性。
e.g.
try:
# Get a Client object.
client = Client(...
...
# Get a list of all jobs owned by the user.
job_list = client.list_job_status()
for job_detail in job_list:
print(job_detail.JobId, job_detail.State, job_detail.StartTime)
except ClientError, e:
print(e)
2.9 list_tasks
参数说明:
属性 | 类型 | 描述 |
job | CreateResponse, str | 作业ID |
返回值说明:
list_tasks方法将返回一个ListResponse 对象, 是一个Task对象的集合,可以像使用list对象一样使用它。 请参阅Task类型的描述,了解Task对象的属性。
e.g.
try:
# Get a Client object.
client = Client(...
...
# Job ID.
job = 'job-xxxx'
indent = ' '*4
task_list = client.list_tasks(job)
for task_detail in task_list:
print(task_detail.TaskName, task_detail.State)
for instance_detail in task.InstanceStatusList:
print(instance_detail.InstanceId, instance_detail.State)
except ClientError, e:
print(e)
(1) Task 类
参数说明:
参数 | 类型 | 描述 |
properties | dict, str, Task | 任务的当前状态信息 |
属性说明:
序号 | 属性 | 类型 | 描述 |
1. | TaskName | str | 任务名称 |
2. | State | str | 任务的运行状态 |
3. | StartTime | int, str | 任务开始时间,单位:秒,如果还在Waiting状态,则为0 |
4. | EndTime | int, str | 任务结束时间, 单位:秒, 如果还没结束,则为0 |
5. | InstanceList | list | 任务所包含的实例集合,是Instance对象的集合 |
(2) Instance 类
参数说明:
参数 | 类型 | 描述 |
properties | dict, str, Instance object | 实例状态信息 |
属性说明:
序号 | 属性 | 类型 | 描述 |
1. | InstanceId | int | 实例ID |
2. | State | str | 实例的运行状态 |
3. | StartTime | int, str | 实例的开始时间,单位:秒, 如果还在Waiting状态,则为0 |
4. | EndTime | int, str | 实例的结束时间,单位:秒, 如果还没结束,则为0 |
2.10 list_images
返回值说明:
list_images方法将返回一个ListResponse对象, 是一个Image对象的集合,可以像使用list对象一个使用它。 请参阅Image类型的描述,了解Image对象的属性。
e.g.
try:
# Get a Client object.
client = Client(...
...
image_list = client.list_images()
for image_detail in image_list:
print(image_detail.ImageId, image_detail.ImageName)
except ClientError, e:
print(e)
(1) Image 类
参数说明:
参数 | 类型 | 描述 |
properties | dict, str, Image | 镜像的状态信息 |
属性说明:
序号 | 属性 | 类型 | 描述 |
1. | Platform | str | 镜像运行环境类型:Windows或者Linux |
2. | ImageId | str | 镜像的ID |
3. | ImageName | str | 镜像名称 |
4. | Description | str | 镜像的简短描述 |