Dimensionamento de cluster

Por padrão, o Cloud Data Fusion usava escalonamento automático como perfil de computação. Estimar o melhor número de workers de cluster (nós) para uma carga de trabalho é difícil, e um único tamanho de cluster para um pipeline inteiro geralmente não é o ideal. O escalonamento automático do Dataproc fornece um mecanismo para automatizar o gerenciamento de recursos do cluster e permite o escalonamento automático de VM de worker do cluster. Para mais informações, consulte Escalonamento automático.

Na página Configuração de computação, em que é possível ver uma lista de perfis, há uma coluna Total de núcleos, que tem o máximo de v CPUs para o qual o perfil pode ser escalonar verticalmente, como Up to 84.

Se você quiser usar o perfil de computação do Dataproc , poderá gerenciar tamanhos de cluster com base no tamanho do pipeline.

Nó mestre

Os nós mestres usam recursos proporcionais ao número de pipelines ou aplicativos extras em execução no cluster. Se você estiver executando pipelines em clusters efêmeros, use duas CPUs e 8 GB de memória para os nós mestres. Se você estiver usando clusters persistentes, talvez precise de nós mestres maiores para acompanhar o fluxo de trabalho. Para entender se você precisa de nós mestres maiores, monitore a memória e o uso da CPU no nó. Recomendamos que os nós de trabalho tenham pelo menos duas CPUs e 8 GB de memória. Se você configurou seus pipelines para usar quantidades maiores de memória, será necessário usar workers maiores.

Para minimizar o tempo de execução, certifique-se de que seu cluster tenha nós suficientes para permitir o máximo possível de processamento paralelo.

Workers

As seções a seguir descrevem os aspectos do dimensionamento dos nós de trabalho.

CPU e memória

Recomendamos que os nós de trabalho sejam dimensionados com pelo menos 2 CPUs e 8 GB de memória. Se você configurou seus pipelines para usar quantidades maiores de memória, use workers maiores. Por exemplo, com um nó de trabalho de 4 CPUs e 15 GB, cada worker terá 4 CPUs e 12 GB disponíveis para executar contêineres YARN. Se o pipeline estiver configurado para executar executores de 1 CPU e 8 GB, o YARN não conseguirá executar mais de um contêiner por nó de trabalho. Cada nó de trabalho teria 3 CPUs e 4 GB extras desperdiçados porque não pode ser usado para executar nada. Para maximizar a utilização de recursos no cluster, a memória e as CPUs do YARN precisam ser um múltiplo exato da quantidade necessária por executor do Spark. É possível verificar quanta memória cada worker reservou para o YARN verificando a propriedade yarn.nodemanager.resource.memory-mb no YARN.

Se você estiver usando o Dataproc, a memória disponível para contêineres YARN será aproximadamente 75% da memória da VM. O tamanho mínimo do contêiner YARN também é ajustado dependendo do tamanho das VMs de worker. Alguns tamanhos comuns de worker e as configurações de YARN correspondentes são fornecidos na tabela a seguir.

CPU do worker Memória do worker (GB) Memória do nó YARN (GB) Memória de alocação mínima do YARN (MB)
1 4 3 256
2 8 6 512
4 16 12 1024
8 32 24 1024
16 64 51 1024

Lembre-se de que o Spark solicita mais memória do que a memória do executor definida para o pipeline e que o YARN arredonda a quantidade solicitada. Por exemplo, suponha que você tenha definido a memória do executor como 2.048 MB e não tenha dado um valor para spark.yarn.executor.memoryOverhead, o que significa que o padrão de 384 MB é usado. Isso significa que o Spark solicita 2.048 MB + 384 MB para cada executor, que o YARN arredonda para um múltiplo exato da alocação mínima do YARN. Quando executado em um nó de trabalho de 8 GB, como a alocação mínima do YARN é de 512 MB, ela é arredondada para 2,5 GB. Isso significa que cada worker pode executar dois contêineres, usando todas as CPUs disponíveis, mas deixando 1 GB de memória YARN (6 GB - 2,5 GB - 2,5 GB) sem uso. Isso significa que o nó de trabalho pode ser menor ou que os executores podem receber um pouco mais de memória. Quando executados em um nó de trabalho de 16 GB, 2.048 MB + 1.024 MB são arredondados para 3 GB, porque a alocação mínima do YARN é de 1.024 MB. Isso significa que cada nó de trabalho pode executar quatro contêineres, com todas as CPUs e a memória YARN em uso.

Para contextualizar, a tabela a seguir mostra os tamanhos de worker recomendados, considerando alguns tamanhos comuns de executor.

CPU do executor Memória do executor (MB) CPU de worker Memória do worker ( GB)
1 2048 4 15
1 3.072 4 21
1 4096 4 26
2 8192 4 26

Por exemplo, um nó de trabalho de 26 GB é convertido em 20 GB de memória utilizável para executar contêineres YARN. Com a memória do executor definida como 4 GB, 1 GB é adicionado como sobrecarga, o que significa contêineres YARN de 5 GB para cada executor. Isso significa que o worker pode executar quatro contêineres sem sobrar recursos extras. Também é possível multiplicar o tamanho dos workers. Por exemplo, se a memória do executor estiver definida como 4.096 GB, um worker com 8 CPUs e 52 GB de memória também funcionará. As VMs do Compute Engine restringem a quantidade de memória que a VM pode ter com base no número de núcleos. Por exemplo, uma VM com quatro núcleos precisa ter pelo menos 7,25 GB de memória e no máximo 26 GB de memória. Isso significa que um executor definido para usar 1 CPU e 8 GB de memória usa 2 CPUs e 26 GB de memória na VM. Se os executores forem configurados para usar duas CPUs e 8 GB de memória, todas as CPUs serão utilizadas.

Disco

O disco é importante para alguns pipelines, mas não para todos. Se o pipeline não contiver embaralhamentos, o disco será usado apenas quando o Spark ficar sem memória e precisar transmitir dados para o disco. Para esses tipos de pipelines, o tamanho e o tipo do disco geralmente não têm um grande impacto no desempenho. Se o pipeline estiver embaralhando muitos dados, o desempenho do disco fará diferença. Se você estiver usando o Dataproc, é recomendável usar tamanhos de disco de pelo menos 1 TB, já que o desempenho do disco aumenta com o tamanho dele. Para informações sobre o desempenho do disco, consulte Configurar discos para atender aos requisitos de desempenho.

Número de workers

Para minimizar o tempo de execução, convém garantir que o cluster seja grande o suficiente para que possa executar o máximo possível em paralelo. Por exemplo, se a origem do pipeline ler dados usando 100 divisões, convém garantir que o cluster seja grande o suficiente para executar 100 executores de uma vez.

A maneira mais fácil de saber se o cluster está subdimensionado é observando a memória pendente YARN ao longo do tempo. Se você estiver usando o Dataproc, um gráfico poderá ser encontrado na página de detalhes do cluster.

Se a memória pendente ficar alta por longos períodos, aumente o número de workers para adicionar essa capacidade extra ao cluster. No exemplo anterior, o cluster precisa ser aumentado em cerca de 28 GB para garantir que o nível máximo de paralelismo seja alcançado.

Modo de flexibilidade aprimorado (EFM)

O EFM permite especificar que apenas os nós de trabalho principais estejam envolvidos ao embaralhar dados. Como os workers secundários não são mais responsáveis pelos dados de embaralhamento intermediários, quando são removidos de um cluster, os jobs do Spark não sofrem atrasos ou erros. Como os workers primários nunca são reduzidos, o cluster reduz o escalonamento vertical com mais estabilidade e eficiência. Se você estiver executando pipelines com embaralhamento em um cluster estático, recomendamos usar o EFM.

Para mais informações sobre EFM, consulte Modo de flexibilidade aprimorado do Dataproc.