Conceitos principais do Apache Spark no Azure Synapse Analytics

O Apache Spark é uma estrutura de processamento paralelo que suporta processamento na memória para aumentar o desempenho de aplicativos analíticos de big data. O Apache Spark no Azure Synapse Analytics é uma das implementações da Microsoft do Apache Spark na cloud.

O Azure Synapse facilita a criação e configuração de recursos do Spark no Azure. O Azure Synapse fornece uma implementação diferente desses recursos do Spark que estão documentados aqui.

Conjuntos do Apache Spark

Um pool Apache Spark sem servidor é criado no portal do Azure. É a definição de um pool do Spark que, quando instanciado, é usado para criar uma instância do Spark que processa dados. Quando um pool do Spark é criado, ele existe apenas como metadados e nenhum recurso é consumido, executado ou 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, mas não estão limitadas ao nome, tamanho, comportamento de escala, tempo de vida.

Como não há custo em dólares ou recursos associado à criação de pools do Spark, qualquer número pode ser criado com qualquer número de configurações diferentes. As permissões também podem ser aplicadas aos pools do Spark, permitindo que os usuários tenham acesso apenas a alguns e não a outros.

Uma prática recomendada é criar pools Spark menores que podem ser usados para desenvolvimento e depuração e, em seguida, pools maiores para executar cargas de trabalho de produção.

Você pode ler como criar um pool do Spark e ver todas as suas propriedades aqui Introdução aos pools do Spark no Azure Synapse Analytics

Instâncias do Apache 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 único pool do Spark, uma nova 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 do Spark existente 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 começa quando a(s) VM(s) do Azure é iniciada. A cobrança das instâncias do pool do Spark é interrompida quando as instâncias do pool mudam para encerramento. Para obter mais informações sobre como as VMs do Azure são iniciadas e deslocalizadas, consulte Estados e status de cobrança das Máquinas Virtuais do Azure.

Exemplos

Exemplo 1

  • Você cria um pool de faíscas chamado SP1; Tem um tamanho de cluster fixo de 20 nós médios
  • Você envia um trabalho de bloco de anotações, J1 que usa 10 nós, uma instância do Spark, SI1 é criado 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, a J2, é processada pelo SI1
  • Se o J2 tivesse pedido 11 nós, não haveria capacidade no SP1 ou SI1. Neste caso, se J2 vem de um notebook, então o trabalho é rejeitado; se J2 vem de um trabalho em lote, ele é enfileirado.
  • A cobrança começa com o envio do trabalho de notebook J1.
    • O pool Spark é instanciado com 20 nós médios, cada um com 8 vCores, e normalmente leva ~3 minutos para iniciar. 20 x 8 = 160 vCores.
    • Dependendo do tempo exato de inicialização do pool Spark, do tempo limite ocioso e do tempo de execução dos dois trabalhos do notebook; é provável que o pool seja executado entre 18 e 20 minutos (tempo de instanciação do pool de faíscas + tempo de execução do trabalho do bloco de anotações + tempo limite ocioso).
    • Supondo um tempo de execução de 20 minutos, 160 x 0,3 horas = 48 horas vCore.
    • Observação: as horas do vCore são cobradas por minuto e o preço do vCore varia de acordo com a região do Azure. Para obter mais informações, consulte Preços do Azure Synapse

Exemplo 2

  • Você cria uma chamada de pool do Spark SP2; Tem uma escala automática ativada com um mínimo de 10 a um máximo de 20 nós médios
  • Você envia um trabalho de bloco de anotações 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 J2.
  • A cobrança começa com o envio do trabalho de notebook J1.
    • O pool Spark é instanciado com 10 nós médios, cada um com 8 vCores, e normalmente leva ~3 minutos para iniciar. 10 x 8, 80 vCores.
    • No envio do J2, o pool é dimensionado automaticamente adicionando outros 10 nós médios e, normalmente, leva 4 minutos para ser dimensionado automaticamente. Adicionando 10 x 8, 80 vCores para um total de 160 vCores.
    • Dependendo do tempo de inicialização do pool Spark, do tempo de execução do primeiro trabalho de notebook J1, do tempo de expansão do pool, do tempo de execução do segundo notebook e, finalmente, do tempo limite de inatividade; é provável que o pool seja executado entre 22 e 24 minutos (tempo de instanciação do pool Spark + tempo de execução do trabalho do notebook J1 todos a 80 vCores) + (tempo de dimensionamento automático do pool Spark + tempo de execução do trabalho do notebook J2 + tempo limite ocioso todos a 160 vCores).
    • 80 vCores por 4 minutos + 160 vCores por 20 minutos = 58,67 vCore horas.
    • Observação: as horas do vCore são cobradas por minuto e o preço do vCore varia de acordo com a região do Azure. Para obter mais informações, consulte Preços do Azure Synapse

Exemplo 3

  • Você cria um pool de faíscas chamado SP1; Tem um tamanho de cluster fixo de 20 nós.
  • Você envia um trabalho de bloco de anotações J1 que usa 10 nós; uma instância do Spark SI1 é criada para processar o trabalho.
  • Outro usuário U2, envia um Job 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 pelo SI1.
  • A cobrança começa com o envio do trabalho de notebook J1.
    • O pool Spark SI1 é instanciado com 20 nós médios, cada um com 8 vCores, e normalmente leva ~3 minutos para iniciar. 20 x 8, 160 vCores.
    • Dependendo do tempo exato de inicialização do pool Spark, do tempo limite do ide e do tempo de execução do primeiro e terceiro trabalho do notebook; É provável que o pool SI1 seja executado entre 18 e 20 minutos (tempo de instanciação do pool Spark + tempo de execução do trabalho do bloco de anotações + tempo limite ocioso).
    • Outro pool Spark SI2 é instanciado com 20 nós médios, cada um com 8 vCores, e normalmente leva ~3 minutos para iniciar. 20 x 8, 160 vCores
    • Dependendo do tempo exato de inicialização do pool Spark, do tempo limite do ide e do tempo de execução do primeiro trabalho do notebook; É provável que o pool SI2 seja executado entre 18 e 20 minutos (tempo de instanciação do pool de faíscas + tempo de execução do trabalho do bloco de anotações + tempo limite de inatividade).
    • Supondo que os dois pools sejam executados por 20 minutos cada, 160 x .03 x 2 = 96 horas vCore.
    • Observação: as horas do vCore são cobradas por minuto e o preço do vCore varia de acordo com a região do Azure. Para obter mais informações, consulte Preços do Azure Synapse

Cotas e restrições de recursos no Apache Spark para Azure Synapse

Nível do espaço de trabalho

Cada área de trabalho do Azure Synapse inclui uma quota predefinida de vCores que pode ser utilizada no Apache Spark. A quota é dividida entre a quota do utilizador e a quota do fluxo de dados para que nenhum padrão de utilização utilize todos os vCores na área de trabalho. A quota é diferente consoante o tipo de subscrição, mas é simétrica entre utilizador e fluxo de dados. No entanto, se você solicitar mais vCores do que estão restantes no espaço de trabalho, você 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 aponta para este artigo.

O artigo a seguir descreve como solicitar um aumento na cota vCore do espaço de trabalho.

  • Selecione "Azure Synapse Analytics" como o tipo de serviço.
  • Na janela Detalhes da cota, selecione Apache Spark (vCore) por espaço de trabalho

Solicitar um aumento de capacidade por meio do portal do Azure

Nível da piscina de faíscas

Quando você define um pool do Spark, você está efetivamente definindo uma cota por usuário para esse pool, se você executar vários blocos de anotações, trabalhos ou uma combinação dos 2, é possível esgotar a cota do pool. Se o fizer, será gerada uma mensagem de erro

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á que reduzir o uso dos recursos do pool antes de enviar uma nova solicitação de recurso executando um bloco de anotações ou um trabalho.

Próximos passos