1. 使用举例
您必须替换代码中的image_id,access_key_id,access_key_secret等用户信息以及OSS相关的路径。
import time
from batchcompute import Cient, ClientError
from batchcompute import CN_SHENZHEN as REGION
from batchcompute.resources import (
JobDescription, TaskDescription, DAG,
GroupDescription, ClusterDescription,
)
# some other codes here
access_key_id = ... # your access key id
access_key_secret = ... # your access key secret
image_id = ... # the id of a image created before
instance_type = ... # instance type
client = Client(REGION, access_key_id, access_key_secret)
try:
# Create cluster.
cluster_desc = ClusterDescription()
group_desc = GroupDescription()
group_desc.DesiredVMCount = 1
group_desc.InstanceType = instance_type
cluster_desc.add_group('group1', group_desc)
cluster_desc.Name = "BatchcomputeCluster"
cluster_desc.ImageId = image_id
cluster_desc.Description = "Python SDK test"
cluster_id = client.create_cluster(cluster_desc).Id
# Create job.
job_desc = JobDescription()
echo_task = TaskDescription()
# Create map task.
echo_task.Parameters.Command.CommandLine = "echo Batchcompute service"
echo_task.Parameters.Command.PackagePath = ""
echo_task.Parameters.StdoutRedirectPath = "oss://xxx/xxx/" # Better replace this path
echo_task.Parameters.StderrRedirectPath = "oss://xxx/xxx/" # Better replace this path
echo_task.InstanceCount = 3
echo_task.ClusterId = cluster_id
# Create task dag.
task_dag = DAG()
task_dag.add_task(task_name="Echo", task=echo_task)
# Create job description.
job_desc.DAG = task_dag
job_desc.Priority = 99 # 0-1000
job_desc.Name = "PythonSDKDemo"
job_desc.JobFailOnInstanceFail = True
job_id = client.create_job(job_desc).Id
# Wait for job finished.
errs = client.poll(job_id)
if errs: print ("Some errors occur: %s" % '\n'.join(errs))
# Delete cluster
client.delete_cluster(cluster_id)
except ClientError, e:
print (e.get_status_code(), e.get_code(), e.get_requestid(), e.get_msg())
2、 类和常量
2.1 接口类型
接口类型提供了BatchCompute服务所有API接口的Python实现以及其他一些有用的辅助接口。
序号 | 名称 | 可序列化 | 描述 |
1. | Client | No | 与BatchCompute服务交互的客户端类型 |
2.2 描述类型
描述类型主要作为创建资源时的参数类型或获取资源状态信息时由服务的返回类型。
序号 | 名称 | 可序列化 | 描述 |
1. | JobDescription | Yes | 描述用户作业的类 |
2. | DAG | Yes | 描述作业任务以及任务间互相之间依赖关系的类 |
3. | TaskDescription | Yes | 描述任务的类 |
4. | Parameters | Yes | 描述任务运行参数的类 |
5. | Command | Yes | 配置任务命令行执行环境类 |
6. | ClusterDescription | Yes | 描述用户集群的类 |
7. | GroupDescription | Yes | 描述用户集群实例配置的类 |
8. | Job | Yes | 描述给定作业当前状态信息的类 |
9. | Task | Yes | 描述给定的作业任务的当前状态信息的类 |
10. | Instance | Yes | 描述给定的任务实例当前状态信息的类 |
11. | Result | Yes | 描述给定的任务实例运行结果的类 |
12. | InstanceMetrics | Yes | 描述给定作业或任务实例统计信息的类 |
13. | TaskMetrics | Yes | 描述给定作业中任务统计信息的类 |
14. | Cluster | Yes | 描述给定集群状态信息的类 |
15. | Group | Yes | 描述给定集群中机器组状态信息的类 |
16. | Metrics | Yes | 描述给定集群作业统计信息的类 |
关于可序列化
描述类型均为可序列化的类型,SDK中所有可序列化的类均从内部类型 Jsonizable 继承而来。以下是关于 Jsonizable 类型及其子类的描述;
参数说明:
Jsonizable 及其子类对象均可通过字典,Jsonizable 对象或者描述字典的JSON串初始化。注意,在初始化 Jsonizable 对象及其子类时,会丢弃字典或者JSON串中所有不合法的属性描述信息。
参数 | 类型 | 描述 |
properties | dict, str, Jsonizable object | 属性描述信息 |
通过字典初始化
Jsonizable
类。
e.g.
from batchcompute.resources import JobDescription
# A dict object.
properties = {
"Name": "PythonSDKDemo",
"Description": "Batchcompute"
}
jsonizable = JobDescription(properties)
print (jsonizable.Name)
print (jsonizable.Description)
通过JSON字符串初始化
Jsonizable
类。
e.g.
from batchcompute.resources import JobDescription
# A string jsonized from a dict object.
properties = '''{
"Name": "PythonSDKDemo",
"Description": "Batchcompute"
}'''
jsonizable = JobDescription(properties)
print (jsonizable.Name)
print (jsonizable.Description)
通过相同类的对象初始化
Jsonizable
类。
e.g.
form batchcompute.resources import JobDescription
# A JobDescription object.
jsonizable1 = JobDescription()
jsonizable1.Name = "PythonSDKDemo"
jsonizable1.Description = "Batchcompute"
jsonizable2 = JobDescription(jsonizable1)
print(jsonizable2.Name)
print(jsonizable2.Description)
方法说明:
序号 | 方法名 | 描述 |
1. | update | 接受一个字典对象,更新类的部分属性,不合法的属性将被丢弃 |
2. | detail | 返回一个包含类属性的字典,如果属性为空将不被包含 |
3. | load | 接受一个字符串,该字符串是一个JSON化的字典,类的属性均被更新,不合法的属性会被丢弃 |
4. | dump | 返回一个字符串,内容JSON化的字典,包含所有类属性信息,如果属性为空将不被包含 |
5. | __str__ | 被print调用的内置函数,其内部调用了dump函数 |
关于类属性
可序列化的类型均具有各种属性。属性均可以通过其名称直接读取,例如,你可以通过如下代码获取作业的ID:另外属性名与Python规范PEP8中类的命名方式保持一致(区别于类方法的命名规则),遵循CamelCase的拼写规则.
# job is a Job object.
job = ...
job_id = job.Id
print (job_id)
另外,可以通过字典取值的方式获取属性,例如:
# job is a Job object.
job = ...
job_id = job["Id"]
print (job_id)
对于类
JobDescription
,DAG
,TaskDescription
, 可以通过赋值的方式更改某个属性的值,例如:
from batchcompute.resources import JobDescription
job_desc = JobDescription()
job_desc.Name = "PythonSDKDemo"
对于类
JobDescription
,DAG
,TaskDescription
, 可以通过字典的方式对类的属性进行赋值, 例如:
from batchcompute.resources import JobDescription
job_desc = JobDescription()
job_desc["Id"] = "PythonSDKDemo"
2.3 响应类型
序号 | 名称 | 可序列化 | 描述 |
1. | CreateResponse | No | 创建资源成功后, Client返回的响应类 |
2. | GetResponse | No | 获取资源状态信息, Client返回的响应类 |
3. | ActionResponse | No | 对资源进行各种操作时由Client返回的响应类 |
4. | ListResponse | No | 列举资源时,由Client返回的响应类 |
关于响应类
所有的响应类型(CreateResponse, GetResponse, ActionResponse, ListResponse)均继承自内部类型RawResponse.以下描述适用于所有RawResponse的子类。
属性说明:
属性 | 类型 | 描述 |
RequestId | str | Client的所有请求的识别码 |
StatusCode | int | Client的所有请求的状态码 |
e.g.
...
response = client.create_job(job_desc)
print (response.RequestId)
print (response.StatusCode)
2.4 异常类型
非法的参数或者非法请求时会抛出异常
序号 | 名称 | 可序列化 | 描述 |
1. | ClientError | No | 异常类 |
2. | FieldError | No | 异常类 |
3. | ValidationError | No | 异常类 |
4. | JSONError | No | 异常类 |
5. | ConfigError | No | 异常类 |
2.5 常量
序号 | 名称 | 可序列化 | 描述 |
1. | CN_QINGDAO | No | 常量,BatchCompute的青岛(华北1)endpoint |
2. | CN_SHENZHEN | No | 常量,BatchCompute的深圳(华南1)endpoint |
3. | CN_BEIJING | No | 常量,BatchCompute的北京(华北2)endpoint |
4. | CN_HANGZHOU | No | 常量,BatchCompute的杭州(华东1)endpoint |