Gerir bibliotecas do Apache Spark no Azure Synapse Analytics

As bibliotecas fornecem código reutilizável que você pode querer incluir em seus programas ou projetos para o Apache Spark no Azure Synapse Analytics (Azure Synapse Spark).

Talvez seja necessário atualizar seu ambiente de pool do Apache Spark sem servidor por vários motivos. Por exemplo, você pode achar que:

  • Uma das suas principais dependências lançou uma nova versão.
  • Você precisa de um pacote extra para treinar seu modelo de aprendizado de máquina ou preparar seus dados.
  • Um pacote melhor está disponível, e você não precisa mais do pacote mais antigo.
  • Sua equipe criou um pacote personalizado que você precisa disponível em seu pool do Apache Spark.

Para disponibilizar código de terceiros ou criado localmente para seus aplicativos, instale uma biblioteca em um dos pools do Apache Spark sem servidor ou em uma sessão de notebook.

Visão geral dos níveis de pacote

Há três níveis de pacotes instalados no Azure Synapse Analytics:

  • Padrão: Os pacotes padrão incluem uma instalação completa do Anaconda, além de bibliotecas extras comumente usadas. Para obter uma lista completa de bibliotecas, consulte Suporte à versão do Apache Spark.

    Quando uma instância do Spark é iniciada, essas bibliotecas são incluídas automaticamente. Você pode adicionar mais pacotes nos outros níveis.

  • Piscina de faíscas: Todos os artefatos em execução podem usar pacotes no nível da piscina de faíscas. Por exemplo, você pode anexar definições de trabalho do bloco de anotações e do Spark aos pools correspondentes do Spark.

    Você pode carregar bibliotecas personalizadas e uma versão específica de uma biblioteca de código aberto que deseja usar em seu espaço de trabalho do Azure Synapse Analytics. Os pacotes de espaço de trabalho podem ser instalados em seus pools do Spark.

  • Sessão: uma instalação no nível da sessão cria um ambiente para uma sessão de bloco de anotações específica. A alteração de bibliotecas de nível de sessão não é persistente entre as sessões.

Nota

  • O gerenciamento de biblioteca no nível do pool pode levar tempo, dependendo do tamanho dos pacotes e da complexidade das dependências necessárias, o tempo máximo de atualização é definido como 50 minutos. Seu trabalho de gerenciamento de biblioteca no nível do pool será cancelado automaticamente se exceder o limite máximo de 50 minutos. Recomendamos a instalação no nível da sessão para cenários iterativos experimentais e rápidos.
  • O gerenciamento de biblioteca no nível do pool produzirá uma dependência estável para executar suas definições de trabalho do Notebooks e do Spark. A instalação da biblioteca no pool do Spark é altamente recomendada para as execuções de pipeline.
  • O gerenciamento de biblioteca no nível de sessão pode ajudá-lo com iterações rápidas ou lidar com as mudanças frequentes da biblioteca. No entanto, a estabilidade da instalação no nível da sessão não é prometida. Além disso, comandos embutidos como %pip e %conda são desabilitados na execução do pipeline. O gerenciamento da biblioteca na sessão do Bloco de Anotações é recomendado durante a fase de desenvolvimento.

Gerenciar pacotes de espaço de trabalho

Quando sua equipe desenvolve aplicativos ou modelos personalizados, você pode desenvolver vários artefatos de código, como arquivos .whl, .jar ou .tar.gz para empacotar seu código.

Importante

  • tar.gz só é suportado para o idioma R. Por favor, use .whl como pacote personalizado Python.

No Azure Synapse, os pacotes de espaço de trabalho podem ser arquivos .whl ou .jar personalizados ou privados. Você pode carregar esses pacotes em seu espaço de trabalho e, posteriormente, atribuí-los a um pool específico do Apache Spark sem servidor. Depois de atribuir esses pacotes de espaço de trabalho, eles são instalados automaticamente em todas as sessões do pool do Spark.

Para saber mais sobre como gerenciar bibliotecas de espaço de trabalho, consulte Gerenciar pacotes de espaço de trabalho.

Gerenciar pacotes de pool

Em alguns casos, talvez você queira padronizar os pacotes usados em um pool do Apache Spark. Essa padronização pode ser útil se várias pessoas da sua equipe normalmente instalarem os mesmos pacotes.

Usando os recursos de gerenciamento de pool do Azure Synapse Analytics, você pode configurar o conjunto padrão de bibliotecas para instalar em um pool Apache Spark sem servidor. Essas bibliotecas são instaladas sobre o tempo de execução base.

Para bibliotecas Python, os pools do Azure Synapse Spark usam o Conda para instalar e gerenciar dependências de pacotes Python. Você pode especificar as bibliotecas Python no nível do pool fornecendo um arquivo requirements.txt ou environment.yml . Esse arquivo de configuração de ambiente é usado sempre que uma instância do Spark é criada a partir desse pool do Spark. Você também pode anexar os pacotes de espaço de trabalho aos seus pools.

Para saber mais sobre esses recursos, consulte Gerenciar pacotes de pool do Spark.

Importante

  • Se o pacote que você está instalando for grande ou demorar muito tempo para ser instalado, isso poderá afetar o tempo de inicialização da instância do Spark.
  • Não há suporte para alterar a versão PySpark, Python, Scala/Java, .NET ou Spark.

Gerenciar dependências para pools do Azure Synapse Spark habilitados para DEP

Nota

Não há suporte para a instalação de pacotes de um repositório público em espaços de trabalho habilitados para DEP. Em vez disso, carregue todas as suas dependências como bibliotecas de espaço de trabalho e instale-as no pool do Spark.

Se você estiver tendo problemas para identificar as dependências necessárias, siga estas etapas:

  1. Execute o script a seguir para configurar um ambiente Python local que seja o mesmo que o ambiente do Azure Synapse Spark. Esse script requer um arquivo YAML contendo uma lista de todas as bibliotecas incluídas no ambiente Python padrão para o Azure Synapse Spark. Você pode encontrar esse arquivo YAML na documentação para versões específicas de tempo de execução, como Apache Spark 3.2 (Fim do suporte anunciado) e Apache Spark 3.3 (GA).

       # One-time Azure Synapse Python setup
       wget Synapse-Python38-CPU.yml
       sudo bash Miniforge3-Linux-x86_64.sh -b -p /usr/lib/miniforge3
       export PATH="/usr/lib/miniforge3/bin:$PATH"
       sudo apt-get -yq install gcc g++
       conda env create -n synapse-env -f Synapse-Python38-CPU.yml 
       source activate synapse-env
    
  2. Execute o script a seguir para identificar as dependências necessárias. O script pode ser usado para passar seu arquivo requirements.txt , que tem todos os pacotes e versões que você pretende instalar no pool do Spark 3.1 ou Spark 3.2. Ele imprimirá os nomes dos novos arquivos/dependências de roda para seus requisitos de biblioteca de entrada.

       # Command to list wheels needed for your input libraries.
       # This command will list only new dependencies that are
       # not already part of the built-in Azure Synapse environment.
       pip install -r <input-user-req.txt> > pip_output.txt
       cat pip_output.txt | grep "Using cached *"
    

    Nota

    Esse script listará apenas as dependências que ainda não estão presentes no pool do Spark por padrão.

Gerenciar pacotes com escopo de sessão

Ao fazer análise de dados interativa ou aprendizado de máquina, você pode tentar pacotes mais recentes ou precisar de pacotes que não estão disponíveis no momento no pool do Apache Spark. Em vez de atualizar a configuração do pool, você pode usar pacotes com escopo de sessão para adicionar, gerenciar e atualizar dependências de sessão.

Os pacotes com escopo de sessão permitem que os usuários definam dependências de pacotes no início da sessão. Quando você instala um pacote com escopo de sessão, somente a sessão atual tem acesso aos pacotes especificados. Como resultado, esses pacotes com escopo de sessão não afetam outras sessões ou trabalhos que usam o mesmo pool do Apache Spark. Além disso, essas bibliotecas são instaladas sobre o tempo de execução básico e pacotes no nível do pool.

Para saber mais sobre como gerenciar pacotes com escopo de sessão, consulte os seguintes artigos:

  • Pacotes de sessão Python: No início de uma sessão, forneça um arquivo Conda environment.yml para instalar mais pacotes Python de repositórios populares. Ou você pode usar %pip comandos para %conda gerenciar bibliotecas nas células de código do Bloco de Anotações.

    Importante

    Não use%%sh para tentar instalar bibliotecas com pip ou conda. O comportamento não é o mesmo que %pip ou %conda.

  • Pacotes de sessão Scala/Java: No início da sessão, forneça uma lista de .jar arquivos a serem instalados usando %%configureo .

  • Pacotes de sessão R: Na sessão, você pode instalar pacotes em todos os nós do pool do Spark usando install.packages ou devtools.

Automatize o processo de gerenciamento de bibliotecas por meio de cmdlets do Azure PowerShell e APIs REST

Se sua equipe quiser gerenciar bibliotecas sem visitar as interfaces do usuário de gerenciamento de pacotes, você tem a opção de gerenciar os pacotes de espaço de trabalho e atualizações de pacotes no nível do pool por meio de cmdlets do Azure PowerShell ou APIs REST para o Azure Synapse Analytics.

Para obter mais informações, consulte os seguintes artigos que podem estar em inglês:

Próximos passos