Todos os produtos
Search
Central de documentação

MaxCompute:Prioridade de Jobs

Última atualização: Sep 21, 2026

Este tópico descreve o recurso de prioridade de jobs no MaxCompute e explica como ativar, definir e visualizar prioridades de jobs.

Contexto

O MaxCompute possui recursos de computação limitados. Durante o desenvolvimento de dados, o sistema precisa priorizar jobs críticos para garantir que eles obtenham os recursos necessários. Por exemplo, se determinados dados precisam estar disponíveis até as 6h da manhã, a série de jobs — ou workflow — responsável por gerar esses dados deve conseguir reivindicar recursos de computação antes dos demais jobs.

Defina prioridades de jobs no nível do projeto para atender a esse requisito. Jobs com maior prioridade recebem recursos de computação primeiro. Quando um job de alta prioridade é iniciado, ele pode preemptar recursos de jobs com prioridade inferior.

Visão geral de prioridades

Todo job no MaxCompute possui um valor de prioridade de 0 a 9. Números menores indicam maior prioridade. Jobs com maior prioridade recebem recursos de computação antes dos jobs com menor prioridade.

Quando o recurso de prioridade de jobs está desativado, a prioridade padrão de todos os jobs em um projeto é 9. Para jobs de algoritmo do PAI, a prioridade padrão é 1.

Ativar prioridade

Ativar prioridade no nível do projeto

Somente o proprietário do projeto ou um usuário com a função Super_Administrator pode execute o seguinte comando para ativar o recurso de prioridade.

setproject odps.instance.priority.enable=true;

Após ativar o recurso de prioridade, todos os jobs do projeto passam a usar prioridade imediatamente. No entanto, se as prioridades forem configuradas incorretamente, os jobs podem entrar em fila de maneira imprevisível.

Importante

Antes de ativar o recurso de prioridade, verifique as prioridades dos jobs existentes usando o Information Schema. Em seguida, redefina para 9 todas as prioridades que não sejam 9, conforme necessário. Só então ative o recurso de prioridade.

Ativar prioridade no nível de cota

Após ativar o recurso de prioridade, os jobs executados nessa cota passam a usar prioridade. O funcionamento é equivalente ao de ativar a prioridade no nível do projeto.

Antes de ativar a prioridade, certifique-se de ter criado um modelo de cota e um plano de cota. Para mais informações, consulte Configure quotas.

Procedimento

  1. Faça login no MaxCompute console e selecione uma região no canto superior esquerdo.

  2. No painel de navegação à esquerda, escolha Manage Configurations > Quotas .

  3. Na página Quotas, clique em Quota Configuration na coluna Actions da cota desejada.

  4. Na página Quota Configuration, selecione a aba Basic Configurations e clique em Edit Basic Configurations.

  5. Marque a caixa de seleção Enable Priority para a cota de segundo nível desejada.

    Nota

    Quando o Type da cota de segundo nível for Interactive, o parâmetro Enable Priority fica indisponível por padrão.

  6. Clique em OK.

Verificar prioridades de jobs

  1. Estatísticas de distribuição de prioridade de jobs

    Exemplo de comando:

    SELECT  get_json_object(
                REPLACE(settings, '.', '_')
                ,'$.odps_instance_priority'
            ) AS priority
            ,task_type
            ,COUNT(1) AS cnt
    FROM    information_schema.tasks_history
    WHERE   ds = '${bizdate}' -- bizdate is the date partition.
    GROUP BY get_json_object(
                 REPLACE(settings, '.', '_')
                 ,'$.odps_instance_priority'
             )
             ,task_type
    ORDER BY cnt DESC
    LIMIT   100
    ;

    O retorno é o seguinte:

    +----------+-----------+------------+
    | priority | task_type | cnt        |
    +----------+-----------+------------+
    | 9        | SQL       | 4          |
    | NULL     | SQL       | 1          |
    | 2        | SQL       | 1          |
    +----------+-----------+------------+

    Este exemplo exibe prioridades NULL, 2 e 9. Identifique os jobs com prioridade 2 ou NULL. O valor NULL geralmente indica uma tarefa DDL, que pode ser ignorada.

  2. Localize os jobs com valores de prioridade diferentes de 9.

    Exemplo de comando:

    SELECT  inst_id
            ,owner_name
            ,task_name
            ,task_type
            ,settings
    FROM    information_schema.tasks_history
    WHERE   ds = '${bizdate}'
    AND     get_json_object(REPLACE(settings, '.', '_'), '$.odps_instance_priority') = '${priority}'
    LIMIT   100
    ;
    • bizdate: A partição de data, como 20200517.

    • priority: Um valor de prioridade diferente de 9, como 2.

    O resultado retornado é o seguinte:

    +---------+------------+-----------+-----------+----------+
    | inst_id | owner_name | task_name | task_type | settings |
    +---------+------------+-----------+-----------+----------+
    | 20200517160200907g4jm**** | ALIYUN$odps_dev_****@prod.trusteeship.aliyunid.com | console_query_task_158973132**** | SQL       | {"SKYNET_ID": "21000041****", "odps.instance.priority": "2", "SKYNET_ONDUTY": "113058643178****", "user_agent": "JavaSDK Revision:33acd11 Version:0.30.9 JavaVersion:1.8.0_112 CLT(0.30.2 : 9da012b); Linux(/)", "biz_id": "210000416174_20200517_211843317416_210033365461_1_habai_test_1130586431784115_39419845061****", "SKYNET_NODENAME": "test_priority"} |
    +---------+------------+-----------+-----------+----------+
    • SKYNET_ID: O ID do nó de agendamento do DataWorks. Se este campo estiver ausente, o job não foi enviado pelo DataWorks. Use os campos owner_name e user_agent para identificar a origem.

    • SKYNET_ONDUTY: Indica um job periódico.

  3. Revise as prioridades dos jobs.

    • Jobs enviados pelo DataWorks: se o job possuir uma baseline, verifique se ela é razoável. Caso contrário, exclua a baseline. Para mais informações, consulte Baseline management.

    • Jobs não enviados pelo DataWorks: use os resultados da consulta para localizar o proprietário e o código. Remova a configuração de prioridade do código para restaurar a prioridade padrão de 9.

Definir prioridade

A prioridade de jobs pode ser definida das seguintes formas:

  • Método 1: execute o cliente MaxCompute, acesse seu projeto e defina a prioridade do job.

    Indicado para consultas ad hoc. Exemplo de comando:

    SET odps.instance.priority=values;
    -- values is an integer from 0 to 9.
  • Método 2: execute o cliente MaxCompute, acesse seu projeto e passe a instrução SQL como parâmetro para definir a prioridade do job.

    Indicado para consultas ad hoc. Exemplo de comando:

    bin/odpscmd --config=xxx --project=xxx --instance-priority=x -e "<sql>"
  • Método 3: defina a prioridade do job usando o Java SDK.

    Use este método para construir lógica de prioridade personalizada. Para mais informações, consulte Java SDK overview. Exemplo de código:

    import com.aliyun.odps.Instance;
    import com.aliyun.odps.LogView;
    import com.aliyun.odps.Odps;
    import com.aliyun.odps.OdpsException;
    import com.aliyun.odps.account.Account;
    import com.aliyun.odps.account.AliyunAccount;
    import com.aliyun.odps.task.SQLTask;
    public class OdpsPriorityDemo {
        public static void main(String args[]) throws OdpsException {
         	  // An Alibaba Cloud AccessKey gives full API access and poses a high security risk. We strongly recommend that you create and use a RAM user instead. To create a RAM user, log on to the RAM console.
    				// In this example, the AccessKey ID and AccessKey secret are stored in environment variables. You can also store them in a configuration file based on your needs.
    				// Never store the AccessKey ID and AccessKey secret in your code. That could expose your credentials.
            Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            Odps odps = new Odps(account);
            // Public cloud endpoint.
            String odpsUrl = "http://service.odps.aliyun.com/api"; 
            odps.setEndpoint(odpsUrl);
            odps.setDefaultProject("xxxxxxxxxx");
            SQLTask task = new SQLTask();
            task.setName("adhoc_sql_task_1");
            task.setQuery("select count(*) from aa;");
         		// 5 is the job priority.
            Instance instance = odps.instances().create(task, 5); 
            LogView logView = new LogView(odps);
            // Print the LogView URL to check the instance status. Optional.
            System.out.println(logView.generateLogView(instance, 24)); 
            // Wait for the instance to complete. Optional.
            instance.waitForSuccess(); 
        }
    }
  • Método 4: defina a prioridade do job por meio do gerenciamento de baselines do DataWorks.

    Recomendado quando é necessário garantir a entrega pontual de um job periódico e de seus jobs upstream. O gerenciamento de baselines permite definir prioridades para todos os jobs de um pipeline de dados de uma só vez, sem precisar configurar cada job individualmente. Para mais informações sobre o gerenciamento de baselines do DataWorks, consulte Baseline management.

    No DataWorks, as prioridades de baseline são 1, 3, 5, 7 ou 8. Números maiores indicam maior prioridade. Ao definir a prioridade de um job MaxCompute por meio do gerenciamento de baselines do DataWorks, a prioridade do job no MaxCompute equivale a 9 menos a prioridade de baseline do DataWorks.

    Nota

    Por padrão, as consultas ad hoc no DataWorks não possuem baseline. Portanto, a menor prioridade para os jobs MaxCompute iniciados por elas é 9.

    Os workflows do DataWorks têm prioridade de baseline padrão igual a 1. Portanto, a menor prioridade para os jobs MaxCompute iniciados por eles é 8.

  • Método 5: defina a prioridade do job diretamente em um nó do DataWorks.

    Indicado para consultas ad hoc. Exemplo de comando:

    set odps.instance.priority=x;
    -- x is the priority value.

Visualizar prioridade

No Logview 2.0, acesse a aba Json Summary e localize o parâmetro odps.instance.priority para visualizar a prioridade do job. Para mais operações no Logview 2.0, consulte View job execution details using Logview 2.0. Logview 2.0

Nota

A prioridade exibida em XML na página do Logview não é precisa. Para projetos com prioridade desativada, o sistema altera qualquer valor de prioridade diferente de 9 para 9 no XML, evitando filas injustas.