No universo do Business Intelligence moderno, lidar com grandes volumes de dados de forma eficiente é um desafio constante. Neste contexto, o Microsoft Fabric surge como uma plataforma unificada que simplifica a arquitetura de dados.
Além disso, a sua integração com o Apache Spark é o coração da sua capacidade de processamento de dados em escala.
Neste artigo, vamos explorar como esta poderosa combinação funciona. Para isso, começaremos por compreender o papel do Spark no processamento distribuído e as suas principais vantagens.
Em seguida, mostraremos como configurar e melhorar a otimização Spark no Microsoft Fabric, através de diferentes configurações de clusters.
1. Visão Geral do Microsoft Fabric
O Microsoft Fabric consolida diferentes funcionalidades numa única plataforma, facilitando a gestão integrada da informação.
Entre estas funcionalidades, destacam-se Data Warehousing, Data Engineering, processamento em tempo real, Data Science e Machine Learning.
2. Como é que o Spark funciona?
O Apache Spark é um mecanismo de processamento distribuído que funciona através de uma arquitetura master-worker, com paralelismo inerente.
Assim, permite processar grandes volumes de dados através de múltiplas máquinas de forma coordenada.
2.1. Arquitetura de Paralelismo no Spark
O Spark opera numa arquitetura hierárquica composta por dois tipos principais de nós: o master node (também designado por driver) e os worker nodes, que executam os executors.
Esta distribuição permite ao Spark dividir tarefas complexas em operações mais pequenas. Desta forma, diferentes componentes conseguem executar essas operações em paralelo.
Driver Node
O driver node atua como o coordenador central do cluster.
Neste sentido, assume as seguintes responsabilidades:
- Analisar, distribuir e agendar tarefas entre os executors.
- Manter o SparkContext, que representa a ligação ao cluster Spark.
- Monitorizar o progresso da execução e garantir tolerância a falhas.
Worker Nodes e Executors
Por outro lado, os worker nodes contêm os executors, que são processos responsáveis pela execução real das tarefas.
Cada executor tem duas responsabilidades principais:
- Executar o código atribuído pelo driver/worker node.
- Reportar o progresso dos cálculos de volta ao driver node.
2.2. Funcionamento do Paralelismo
O Spark alcança o paralelismo através da divisão dos dados em partições, que distribui pelos diferentes nós do cluster.
Desta forma, diferentes threads processam cada partição de forma independente, permitindo executar operações simultâneas.
Por exemplo, se um dataset estiver dividido em múltiplas partições de 128 MB, diferentes executors podem processá-las em paralelo.
Consequentemente, esta distribuição permite maximizar a utilização dos recursos computacionais.
Além disso, o Spark cria um DAG (Directed Acyclic Graph) para programar tarefas e orquestrar os nós worker no cluster.
Este mecanismo permite otimizar a sequência de operações. Por outro lado, facilita a recuperação em caso de falhas, replicando apenas as operações necessárias nos dados de um estado anterior.
3. Configurações Spark no Microsoft Fabric
A configuração dos clusters é uma etapa importante na otimização Spark no Microsoft Fabric.
Por isso, é fundamental considerar os requisitos de acesso, o dimensionamento dos recursos e as características dos processos.
3.1. Pré-requisitos
Antes de iniciar a configuração, é necessário garantir:
- Acesso ao portal do Microsoft Fabric com as permissões necessárias (admin, contributor ou member).
- SKU de Fabric previamente contratado ou Fabric Trial ativo.
3.2. Passos para Configuração
Configuração de Clusters Pre-warmed
O Microsoft Fabric oferece Starter Pools que utilizam clusters pre-warmed, executados em máquinas virtuais da Microsoft.
Desta forma, conseguem reduzir significativamente os tempos de início.
Estes clusters estão ativos e preparados para utilização, proporcionando a inicialização de sessões Spark tipicamente entre 5 e 10 segundos.
Além disso, não exigem configuração manual.
Os Starter Pools utilizam nós de tamanho médio, que escalam dinamicamente de acordo com as necessidades dos trabalhos Spark.
Assim, quando não existem dependências de bibliotecas personalizadas ou propriedades Spark customizadas, as sessões podem iniciar quase instantaneamente.
Isto acontece porque o cluster já se encontra em execução e não necessita de tempo adicional de provisionamento.
No entanto, existem cenários em que o tempo de início pode ser superior:
- Bibliotecas personalizadas: Podem acrescentar entre 30 segundos e 5 minutos para personalização da sessão.
- Alta utilização regional: Quando os Starter Pools estão saturados, a criação de novos clusters pode demorar entre 2 e 5 minutos.
- Opções de rede: Private Links ou Managed VNets podem desativar os Starter Pools, obrigando à criação de clusters on-demand.
Ativação do High Concurrency Mode
Recomenda-se ativar o High Concurrency Mode para permitir que múltiplos notebooks partilhem a mesma sessão Spark.
Desta forma, é possível otimizar a utilização de recursos e reduzir significativamente os tempos de início.
Além disso, os pools personalizados com High Concurrency proporcionam uma experiência de início de sessão mais rápida, comparativamente às sessões Spark standard.
Para ativar o High Concurrency Mode:
- Aceder às Workspace Settings.
- Navegar para Data Engineering/Science > Spark Settings > High Concurrency.
- Ativar a opção For notebooks.
EEspecificações Recomendadas para Pools
Para demonstrar as configurações ideais, consideremos um exemplo com o SKU F64.
Capacidade Base:
- F64 = 64 Capacity Units = 128 Spark VCores.
- Com um burst factor 3x, é possível atingir um máximo de 384 Spark VCores.
Neste caso, o burst factor multiplica a capacidade de processamento disponível, permitindo aumentar o desempenho.
| Parâmetro | Valor Recomendado | Explicação |
|---|---|---|
| Node Family | Memory Optimized | Adequado para workloads de processamento de dados |
| Node Size | Medium (8 VCores) | Equilíbrio entre performance e concorrência |
| Autoscale | Ativado (min: 2, max: 48) | 48 nós × 8 VCores = 384 VCores (máximo burst) |
| Dynamic Allocation | Ativado | Permite ajuste automático de executors conforme demanda |
Configuração de Dynamic Allocation:
- Min Executors: 2 (baseline para disponibilidade imediata).
- Max Executors: 46 (reservando 2 nós para driver e overhead).
- Initial Executors: 4 (equilíbrio entre tempo de arranque e utilização de recursos).
Dimensionamento Baseado no SKU:
Para diferentes SKUs, as configurações máximas variam:
| SKU | Capacity Units | Max Spark VCores | Node Size Recomendado | Max Nodes |
|---|---|---|---|---|
| F2 | 2 | 12 | Small | 3 |
| F8 | 8 | 48 | Medium | 6 |
| F16 | 16 | 96 | Medium | 12 |
| F64 | 64 | 384 | Medium/Large | 48/24 |
| F128 | 128 | 768 | Large | 48 |
Configuração de Dynamic Allocation:
- Min Executors: 2 (baseline para disponibilidade imediata).
- Max Executors: 46 (reservando 2 nós para driver e overhead).
- Initial Executors: 4 (equilíbrio entre tempo de arranque e utilização de recursos).
Dimensionamento Baseado no SKU
Para diferentes SKUs, as configurações máximas variam.
Por isso, é importante avaliar os recursos disponíveis antes de definir o número e o tamanho dos nós.
| SKU | Capacity Units | Max Spark VCores | Node Size Recomendado | Max Nodes |
|---|---|---|---|---|
| F2 | 2 | 12 | Small | 3 |
| F8 | 8 | 48 | Medium | 6 |
| F16 | 16 | 96 | Medium | 12 |
| F64 | 64 | 384 | Medium/Large | 48/24 |
| F128 | 128 | 768 | Large | 48 |
Configuração Através do Portal
Depois de definir os requisitos do cluster, é possível avançar para a configuração no portal do Microsoft Fabric.
No portal do Microsoft Fabric:
- Aceder à secção Engenharia de Dados > Spark Settings.
- Selecionar New Pool para criar um cluster personalizado.
- Definir o Node Family e Node Size, conforme os requisitos.
- Configurar o Autoscale, com número mínimo de nós igual a 1 (o Fabric garante disponibilidade restaurável mesmo com um único nó).
- Ativar Dynamic Executor Allocation para otimizar automaticamente os recursos.
Integração com Fontes de Dados:
- Utilizar conectores nativos para estabelecer ligações a Data Lakes ou Data Warehouses.
- Além disso, verificar se as credenciais e configurações de segurança estão corretamente definidas.
Configuração de Notebooks e Tarefas:
- Configurar notebooks (Python ou Scala) para desenvolver scripts de transformação.
- Posteriormente, agendar tarefas batch ou configurar processos streaming, conforme os requisitos.
Os pools personalizados têm um autopause padrão de 2 minutos.
Após esse período de inatividade, as sessões expiram e os clusters deixam de ter recursos alocados. Desta forma, a plataforma cobra apenas pelo tempo de utilização ativa.
No entanto, as parametrizações ideais do cluster podem variar consoante os processos que serão executados.
Por isso, é fundamental realizar uma avaliação acompanhada de testes para cada caso.
4. Melhores Práticas e Considerações Técnicas
A otimização Spark no Microsoft Fabric exige uma avaliação adequada dos recursos disponíveis e das características de cada processo.
Neste sentido, é importante considerar o dimensionamento, a automatização, a monitorização e a segurança.
Dimensionamento e Otimização
É fundamental dimensionar corretamente o cluster.
Para isso, considere os seguintes fatores:
Burst Factor: Determine a capacidade de escalabilidade instantânea necessária para lidar com picos de processamento.
Neste caso, a lógica deve incluir a multiplicação do número de VCores utilizados na seleção. Assim, é possível atingir o burst factor pretendido.
Por exemplo, para um SKU F64, com 128 VCores base, configure o pool para atingir até 384 VCores.
Para isso, ajuste o número e o tamanho dos nós, como no exemplo: Medium nodes (8 VCores cada) × 48 nós = 384 VCores.
Número de Cores e Memória: Para o driver node, selecione um número adequado de cores e memória.
Isto é importante porque este nó coordena o processamento e deve suportar as tarefas de gestão do cluster.
Por outro lado, nos worker nodes, a escolha deve considerar a multiplicação dos recursos necessários para o processamento paralelo, nomeadamente núcleos e memória.
Além disso, avalie a possibilidade de escalar estes nós para ajustar o desempenho conforme a carga.
Automatização e Agendamento
Automatize processos recorrentes através de scripts e agendamentos.
Desta forma, consegue garantir maior consistência e minimizar erros.
Monitorização
Utilize as ferramentas de monitorização nativas do Microsoft Fabric para identificar possíveis problemas.
Assim, pode ajustar o desempenho do cluster em tempo real.
Segurança
Assegure a implementação de políticas de segurança robustas, configurando as permissões necessárias.
Além disso, utilize ligações seguras para garantir o acesso adequado aos dados.
Quais os Próximos Passos?
A B2F dispõe de uma sólida experiência no desenvolvimento de soluções em Microsoft Fabric, assim como na implementação de processos baseados em Apache Spark.
Caso necessite de apoio especializado para maximizar o desempenho e a eficiência da sua plataforma analítica, a nossa equipa está preparada para colaborar consigo.
Desta forma, podemos encontrar as soluções mais adequadas aos desafios específicos da sua organização.

