Gestão de recursos

Os pipelines permitem especificar as CPUs e a memória a atribuir ao controlador e a cada executor. Pode configurar recursos nas configurações do pipeline do Cloud Data Fusion Studio. Para mais informações, consulte o artigo Faça a gestão das configurações de pipelines.

Esta página fornece as diretrizes sobre a quantidade de recursos de controlador e executor a configurar para o seu exemplo de utilização.

Controlador

Uma vez que o controlador não realiza muito trabalho, a predefinição de 1 CPU e 2 GB de memória é suficiente para executar a maioria dos pipelines. Pode ter de aumentar a memória para pipelines que contenham muitas fases ou esquemas grandes. Conforme mencionado em Processamento paralelo de JOINs, se o pipeline estiver a executar joins na memória, os conjuntos de dados na memória também têm de caber na memória do controlador.

Executor

Considere as seguintes diretrizes sobre os recursos de CPU e memória.

CPU

O número de CPUs atribuídas a um executor determina o número de tarefas que o executor pode executar em paralelo. Cada partição de dados requer uma tarefa para processar. Na maioria dos casos, é mais simples definir o número de CPUs como um e, em vez disso, focar-se no ajuste da memória.

Memória

Para a maioria dos pipelines, 4 GB de memória do executor são suficientes para executar o pipeline com êxito. As junções de vários terabytes fortemente enviesadas foram concluídas com 4 GB de memória do executor. É possível melhorar a velocidade de execução aumentando a quantidade de memória, mas isto requer uma compreensão profunda dos seus dados e pipeline.

O Spark divide a memória em várias secções. Uma secção está reservada para a utilização interna do Spark e outra para a execução e o armazenamento.

Por predefinição, a secção de armazenamento e execução corresponde a cerca de 60% da memória total. A propriedade spark.memory.fraction configuration do Spark (predefinição: 0,6) controla esta percentagem. Este valor tem um bom desempenho para a maioria das cargas de trabalho e, normalmente, não precisa de ser ajustado.

A secção de armazenamento e execução está ainda dividida em espaços separados para armazenamento e execução. Por predefinição, esses espaços têm o mesmo tamanho, mas pode ajustá-los definindo spark.memory.storageFraction (predefinição de 0,5) para controlar a percentagem do espaço reservada para armazenamento.

O espaço de armazenamento armazena dados em cache. O espaço de execução armazena dados de aleatorização, junção, ordenação e agregação. Se houver espaço adicional na secção de execução, o Spark pode usar parte desse espaço para dados de armazenamento. No entanto, os dados de execução nunca usam o espaço de armazenamento.

Se souber que o seu pipeline não está a colocar em cache nenhum dado, pode reduzir a fração de armazenamento para deixar mais espaço para os requisitos de execução.

Ponto a considerar: memória do contentor YARN

A definição de memória do executor controla a quantidade de memória de heap atribuída aos executores. O Spark adiciona uma quantidade adicional de memória para memória fora do heap, que é controlada pela definição spark.executor.memoryOverhead, que tem o valor predefinido de 384 m. Isto significa que a quantidade de memória que o YARN reserva para cada executor é superior ao número definido na configuração de recursos do pipeline. Por exemplo, se definir a memória do executor como 2048 m, o Spark adiciona 384 m a esse número e pede ao YARN um contentor de 2432 m. Além disso, o YARN arredonda o número de pedidos para cima até um múltiplo de yarn.scheduler.increment-allocation-mb, que é, por predefinição, o valor de yarn.scheduler.minimum-allocation-mb. Se estiver definido como 512, o YARN arredonda os 2432 m para 2560 m. Se o valor estiver definido como 1024, o YARN arredonda os 2432 m para 3072 m. Este ponto é útil para ter em atenção ao determinar o tamanho de cada nó de trabalho no cluster.