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 |