Conceitos principais do Apache Spark no Azure Synapse Analytics
O Apache Spark é uma estrutura de processamento paralelo que dá suporte ao processamento na memória para melhorar o desempenho de aplicativos de análise de Big Data. O Apache Spark no Azure Synapse Analytics é uma das implementações da Microsoft do Apache Spark na nuvem.
O Azure Synapse facilita a criação e a configuração de recursos do Spark no Azure. O Azure Synapse fornece uma implementação diferente dos recursos do Spark que estão documentados aqui.
Pools do Spark
Um Pool do Apache Spark sem servidor foi criado no portal do Azure. É a definição de um Pool do Spark que, após a criação de uma instância, é usada para criar uma instância do Spark que processa dados. Quando um Pool do Spark é criado, ele existe somente como metadados e nenhum recurso é consumido, executado nem cobrado. Um Pool do Spark tem uma série de propriedades que controlam as características de uma instância do Spark. Essas características incluem, sem limitações, o nome, o tamanho, o comportamento de dimensionamento e a vida útil.
Como não há nenhum custo monetário nem de recurso associado à criação de um pool do Spark, qualquer quantidade pode ser criada, com qualquer quantidade de configurações diferentes. Permissões também podem ser aplicadas a Pools do Spark, permitindo que os usuários tenham acesso apenas a alguns pools específicos.
A melhor prática é criar Pools do Spark menores que possam ser usados para desenvolvimento e depuração e, em seguida, criar maiores para executar cargas de trabalho de produção.
Você pode ler como criar um Pool do Spark e ver todas as suas propriedades em Introdução aos pools do Spark no Azure Synapse Analytics
Instâncias do Spark
As instâncias do Spark são criadas quando você se conecta a um Pool do Spark, cria uma sessão e executa um trabalho. Como vários usuários podem ter acesso a um Pool do Spark, uma instância do Spark é criada para cada usuário que se conecta.
Quando você envia um segundo trabalho, se houver capacidade no pool, a instância existente do Spark também terá capacidade. Em seguida, a instância existente processa o trabalho. Caso contrário, se a capacidade estiver disponível no nível do pool, uma nova instância do Spark será criada.
A cobrança das instâncias é iniciada quando as VMs do Azure são iniciadas. A cobrança das instâncias do pool do Spark é interrompida quando as instâncias do pool são alteradas para encerramento. Para obter mais informações sobre como as VMs do Azure são iniciadas e desalocadas, veja Estados e status de cobrança de Máquinas Virtuais do Azure.
Exemplos
Exemplo 1
- Você cria um Pool do Spark chamado SP1; ele tem um tamanho de cluster fixo de 20 nós médios
- Você envia um trabalho de notebook, J1, que usa 10 nós, uma instância do Spark, SI1, é criada para processar o trabalho
- Agora você envia outro trabalho, J2, que usa 10 nós porque ainda há capacidade no pool e a instância J2 é processada pela SI1
- Se J2 solicitasse 11 nós, não haveria capacidade no SP1 nem na SI1. Nesse caso, se J2 vem de um bloco de anotações, o trabalho é rejeitado; se j2 vem de um trabalho em lote, ele está na fila.
- A cobrança começa no envio do trabalho de notebook J1.
- O pool do Spark é instanciado com 20 nós médios, cada um com 8 vCores e normalmente leva cerca de 3 minutos para ser iniciado. 20 x 8 = 160 vCores.
- Dependendo do tempo de inicialização exato do pool do Spark, do tempo limite ocioso e do runtime dos dois trabalhos de notebook, é provável que o pool seja executado entre 18 e 20 minutos (tempo de instanciação do pool do Spark + runtime do trabalho de notebook + tempo limite ocioso).
- Supondo o runtime de 20 minutos, 160 x 0,3 horas = 48 horas de vCore.
- Observação: as horas do vCore são cobradas por minuto e os preços do vCore variam de acordo com a região do Azure. Para obter mais informações, veja os Preços do Azure Synapse
Exemplo 2
- Você cria uma chamada de pool do Spark SP2; ela tem um dimensionamento automático habilitado com um mínimo de 10 a um máximo de 20 nós médios
- Você envia um trabalho de notebook, J1, que usa 10 nós; uma instância do Spark, SI1, é criada para processar o trabalho
- Agora você envia outro trabalho, J2, que usa 10 nós; como ainda há capacidade no pool, a instância é dimensionada automaticamente para 20 nós e processa o J2.
- A cobrança começa no envio do trabalho de notebook J1.
- O pool do Spark é instanciado com 10 nós médios, cada um com 8 vCores e normalmente leva cerca de 3 minutos para ser iniciado. 10 x 8, 80 vCores.
- No envio de J2, o pool é dimensionado automaticamente adicionando outros 10 nós médios e normalmente leva 4 minutos para fazer o dimensionamento automático. Adicionando 10 x 8, 80 vCores para um total de 160 vCores.
- Dependendo do tempo de inicialização do pool do Spark, do runtime do primeiro trabalho de notebook J1, do tempo para escalar verticalmente o pool, do runtime do segundo notebook e, por fim, o tempo limite ocioso; é provável que o pool seja executado entre 22 e 24 minutos (tempo de instanciação do pool do Spark + runtime do trabalho de notebook J1 em 80 vCores) + (tempo de atividade do dimensionamento automático do pool do Spark + runtime do trabalho de notebook J2 + tempo limite ocioso em 160 vCores).
- 80 vCores por 4 minutos + 160 vCores por 20 minutos = 58,67 horas de vCore.
- Observação: as horas do vCore são cobradas por minuto e os preços do vCore variam de acordo com a região do Azure. Para obter mais informações, veja os Preços do Azure Synapse
Exemplo 3
- Você cria um Pool do Spark chamado SP1; ele tem um tamanho de cluster fixo de 20 nós.
- Você envia um trabalho de notebook, J1, que usa 10 nós, uma instância do Spark, SI1, é criada para processar o trabalho.
- Outro usuário, U2, envia um trabalho, J3, que usa 10 nós; uma nova instância do Spark, SI2, é criada para processar o trabalho.
- Agora você envia outro trabalho, J2, que usa 10 nós porque ainda há capacidade no pool e a instância J2 é processada pela SI1.
- A cobrança começa no envio do trabalho de notebook J1.
- O pool do Spark SI1 é instanciado com 20 nós médios, cada um com 8 vCores e normalmente leva cerca de 3 minutos para ser iniciado. 20 x 8, 160 vCores.
- Dependendo do tempo de inicialização exato do pool do Spark, do tempo limite ocioso e do runtime do primeiro e terceiro trabalho de notebook, é provável que o pool SI1 seja executado entre 18 e 20 minutos (tempo de instanciação do pool do Spark + runtime do trabalho de notebook + tempo limite ocioso).
- Outro pool do Spark SI2 é instanciado com 20 nós médios, cada um com 8 vCores e normalmente leva cerca de 3 minutos para ser iniciado. 20 x 8, 160 vCores
- Dependendo do tempo de inicialização exato do pool do Spark, do tempo limite ocioso e do runtime do primeiro trabalho de notebook, é provável que o pool SI2 seja executado entre 18 e 20 minutos (tempo de instanciação do pool do Spark + runtime do trabalho de notebook + tempo limite ocioso).
- Supondo que os dois pools sejam executados por 20 minutos cada, 160 x 0,3 x 2 = 96 horas de vCore.
- Observação: as horas do vCore são cobradas por minuto e os preços do vCore variam de acordo com a região do Azure. Para obter mais informações, veja os Preços do Azure Synapse
Cotas e restrições de recursos no Apache Spark para o Azure Synapse
Nível do workspace
Cada workspace do Azure Synapse é fornecido com uma cota padrão de vCores que pode ser usada no Spark. A cota é dividida entre a cota do usuário e a cota de fluxo de trabalho para que nenhum padrão de uso ocupe todos os vCores no workspace. A cota é diferente dependendo do tipo de assinatura, mas é simétrica entre o usuário e o fluxo de dados. No entanto, se você solicitar mais vCores do que o restante no espaço de trabalho, receberá o seguinte erro:
Failed to start session: [User] MAXIMUM_WORKSPACE_CAPACITY_EXCEEDED
Your Spark job requested 480 vCores.
However, the workspace only has xxx vCores available out of quota of yyy vCores.
Try reducing the numbers of vCores requested or increasing your vCore quota. Click here for more information - https://go.microsoft.com/fwlink/?linkid=213499
O link na mensagem indica este artigo.
O artigo a seguir descreve como solicitar um aumento na cota do vCore do workspace.
- Selecione "Azure Synapse Analytics" como o tipo de serviço.
- Na janela Detalhes da cota, selecione Apache Spark (vCore) por workspace
Solicitar um aumento de capacidade por meio do portal do Azure
Nível do Pool do Spark
Quando você define um Pool do Spark, está efetivamente definindo uma cota por usuário para esse pool; se você executar vários notebooks, trabalhos ou uma combinação dos dois, é possível esgotar a cota do pool. Se você fizer isso, uma mensagem de erro será gerada
Failed to start session: Your Spark job requested xx vCores.
However, the pool is consuming yy vCores out of available zz vCores.Try ending the running job(s) in the pool, reducing the numbers of vCores requested, increasing the pool maximum size or using another pool
Para resolver esse problema, você terá de reduzir o uso dos recursos do pool antes de enviar uma nova solicitação de recurso executando um notebook ou um trabalho.