Os pipelines permitem especificar as CPUs e a memória a serem fornecidas ao driver e a cada executor. É possível configurar recursos nas configurações do pipeline do Cloud Data Fusion Studio. Para mais informações, consulte Gerenciar configurações de pipeline.
Esta página fornece as diretrizes sobre quantos recursos de driver e executor configurar para seu caso de uso.
Driver
Como o driver não tem muito trabalho, o padrão de 1 CPU e 2 GB de memória é suficiente para executar a maioria dos pipelines. Pode ser necessário aumentar a memória dos pipelines que contêm muitos estágios ou esquemas amplos. Conforme mencionado em Processamento paralelo de JOINs, se o pipeline estiver realizando mesclagens na memória, os conjuntos de dados na memória também precisarão caber na memória do driver.
Executor
Considere as diretrizes a seguir sobre recursos de CPU e memória.
CPU
O número de CPUs atribuídas a um executor determina o número de tarefas que ele pode executar em paralelo. Cada partição de dados requer uma tarefa para processamento. Na maioria dos casos, é mais simples definir o número de CPUs como um e focar na configuração da memória.
Memória
Para a maioria dos pipelines, 4 GB de memória do executor são suficientes para executar o pipeline. As mesclagens de vários terabytes com forte distorção 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 isso requer um bom entendimento dos dados e do pipeline.
O Spark divide a memória em várias seções. Uma seção é reservada para uso interno do Spark, e outra é para execução e armazenamento.
Por padrão, a seção de armazenamento e execução é de aproximadamente 60% da memória
total. A propriedade spark.memory.fraction configuration
do Spark (padrão 0,6)
controla essa porcentagem. Esse valor funciona bem para a maioria das cargas de trabalho e
normalmente não precisa ser ajustado.
A seção de armazenamento e execução é dividida em espaços separados para
armazenamento e execução. Por padrão, esses espaços têm o mesmo tamanho, mas você pode
ajustá-los definindo spark.memory.storageFraction
(padrão 0,5) para
controlar qual porcentagem do espaço é reservada para armazenamento.
O espaço de armazenamento armazena dados em cache. O espaço de execução armazena dados de embaralhamento, mesclagem, classificação e agregação. Se houver espaço extra na seção de execução, o Spark poderá usar parte dele para armazenar dados. No entanto, os dados de execução nunca usarão o espaço de armazenamento.
Se você souber que o pipeline não está armazenando dados em cache, reduza a fração de armazenamento para deixar mais espaço para os requisitos de execução.
Ponto a considerar: memória do contêiner YARN
A configuração de memória do executor controla a quantidade de memória de heap fornecida aos
executores. O Spark adiciona uma quantidade extra de memória para a memória off-heap, que
é controlada pela configuração spark.executor.memoryOverhead
, que é padrão para
384 MB. Isso significa que a quantidade de memória que o YARN reserva para cada executor é
maior do que o número definido na configuração de recursos do pipeline. Por exemplo,
se você definir a memória do executor como 2048 MB, o Spark vai adicionar 384 MB a esse número e solicitar
o YARN para um contêiner de 2432 MB. Além disso, o YARN arredonda o número de solicitações para
um múltiplo de yarn.scheduler.increment-allocation-mb
, que é definido como o
valor de yarn.scheduler.minimum-allocation-mb
. Se ele estiver definido como 512, o YARN
arredonda os 2432m para 2560m. Se o valor for definido como 1024, o YARN arredondará 2432m para 3072m. Esse ponto é útil para determinar o tamanho
de cada nó de trabalho no cluster.