Uma tarefa, como uma tarefa SQL, é a unidade básica de computação no MaxCompute. Este tópico descreve as operações básicas para instâncias de tarefas no PyODPS.
Operações básicas
Ao executar uma tarefa, o sistema a instancia como uma instância do MaxCompute, também chamada apenas de instância. As operações comuns para instâncias incluem:
list_instances(): Lista todas as instâncias em um projeto.exist_instance(): Verifica se uma instância existe.get_instance(): Obtém uma instância específica.-
stop_instance(): Interrompe uma instância. É possível interromper apenas instâncias em execução. O sistema retorna um erro ao tentar interromper uma instância em qualquer outro status.NotaChamar o método
stopem um objeto Instance também interrompe a instância. Exemplo:o.get_instance('instance id').stop.
Exemplos
-
Obter o ID de uma instância
for instance in o.list_instances(): print(instance.id) -
Verificar se uma instância existe
print(o.exist_instance('my_instance_id'))
Obter o endereço do Logview
-
Para tarefas como SQL, chame o método
get_logview_addressem um objeto Instance para obter o endereço do Logview.# Get the Logview address from an existing instance object. instance = o.run_sql('desc pyodps_iris') print(instance.get_logview_address()) # Get the Logview address from an instance ID. instance = o.get_instance('my_instance_id') print(instance.get_logview_address()) -
Para tarefas do PAI, enumere primeiro as subtarefas e depois obtenha o endereço do Logview de cada uma.
instance = o.run_xflow('AppendID', 'algo_public', {'inputTableName': 'input_table', 'outputTableName': 'output_table'}) for sub_inst_name, sub_inst in o.get_xflow_sub_instances(instance).items(): print('%s: %s' % (sub_inst_name, sub_inst.get_logview_address()))
Status da instância de tarefa
O status de uma instância pode ser Running, Suspended ou Terminated. Os métodos a seguir referem-se ao status da instância:
status: Propriedade que obtém o status atual.is_terminated: Indica se a instância terminou a execução.is_successful: Informa se a instância foi executada com sucesso. Retorna False se a tarefa estiver em execução ou tiver falhado.
Os exemplos de código a seguir demonstram o uso desses métodos.
-
Obter o status de uma instância.
instance=o.get_instance('my_instance_id') print(instance.status) print(instance.status.value)Valores de retorno de exemplo:
Status.TERMINATED Terminated -
Verificar se a instância atual terminou a execução.
instance=o.get_instance('my_instance_id') from odps.models import Instance print(instance.status == Instance.Status.TERMINATED)Um valor de retorno
Trueindica que a instância concluiu a execução.
A chamada ao método wait_for_completion bloqueia o processo até que a instância termine a execução. O método wait_for_success também bloqueia o processo, mas lança uma exceção se a tarefa falhar.
Operações de subtarefas
Durante a execução, uma instância pode conter uma ou mais subtarefas, também chamadas de tarefas. Observe que essa Task difere da unidade básica de computação do MaxCompute. Os seguintes métodos estão disponíveis para essas tarefas:
-
get_task_names: Obtém os nomes de todas as subtarefas e retorna uma lista com eles.instance=o.get_instance('my_instance_id') instance.get_task_names()Valor de retorno de exemplo:
['jdbc_sql_task'] -
get_task_result: Obtém o resultado da execução de uma tarefa especificada. O método retorna o resultado de cada tarefa em formato de dicionário. Veja os exemplos de código abaixo:-
Obter o nome da subtarefa.
instance=o.execute_sql('select*frompyodps_irislimit1') print(instance.get_task_names())Valor de retorno de exemplo:
['AnonymousSQLTask'] -
Consultar o resultado da execução da subtarefa.
print(instance.get_task_result('AnonymousSQLTask'))Valor de retorno de exemplo:
"sepallength","sepalwidth","petallength","petalwidth","name" 4.9,3.0,1.4,0.2,"Iris-setosa" -
Listar os resultados das subtarefas.
print(instance.get_task_results())Valor de retorno de exemplo:
OrderedDict([('AnonymousSQLTask', '"sepallength","sepalwidth","petallength","petalwidth","name"\n4.9,3.0,1.4,0.2,"Iris-setosa"\n')])
-
-
get_task_progress: Monitora o progresso atual de uma tarefa enquanto a instância está em execução.instance=o.get_instance('20160519101349613gzbzufck2') while not instance.is_terminated(): for task_name in instance.get_task_names(): print(instance.id, instance.get_task_progress(task_name).get_stage_progress_formatted_string()) time.sleep(10)Valor de retorno de exemplo:
20160519101349613gzbzufck2 2016-05-19 18:14:03 M1_Stg1_job0:0/1/1[100%]