Gerenciar bibliotecas do Apache Spark no Azure Synapse Analytics

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

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

  • Uma das suas principais dependências acabou de lançar uma nova versão.
  • Você precisa de um pacote extra para treinar seu modelo de machine learning 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 usar no seu pool do Apache Spark.

Para disponibilizar códigos de terceiros ou criados 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 e bibliotecas extras comumente usadas. Para uma lista completa de bibliotecas, confira 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 em outros níveis.

  • Pool do Spark: todos os artefatos em execução podem usar pacotes no nível do pool do Spark. Por exemplo, você pode anexar definições de trabalho do Notebook e do Spark aos pools do Spark correspondentes.

    É possível carregar bibliotecas personalizadas e uma versão específica de uma biblioteca de código aberto que você queira usar em seu workspace do Azure Synapse Analytics. Os pacotes de workspace 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 notebook específica. A alteração das bibliotecas no nível da sessão não é persistida entre as sessões.

Observação

  • O gerenciamento de bibliotecas no nível do pool pode ser demorado. Dependendo do tamanho dos pacotes e da complexidade das dependências requeridas, o tempo máximo de atualização é configurado para 50 minutos. Seu trabalho de gerenciamento de bibliotecas 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 de pool produzirá uma dependência estável para executar suas definições de trabalho do Spark e Notebooks. A instalação da biblioteca no pool do Spark é altamente recomendada para as execuções de pipeline.
  • O gerenciamento de biblioteca de nível de sessão pode ajudá-lo com iteração rápida ou a lidar com as alterações frequentes da biblioteca. No entanto, a estabilidade da instalação no nível de sessão não é prometida. Além disso, comandos em linha, como %pip e %conda estão desabilitados na execução do pipeline. É recomendável gerenciar a biblioteca na sessão do Notebook durante a fase de desenvolvimento.

Gerenciar pacotes do workspace

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

Importante

  • O arquivo tar.gz só tem suporte para a linguagem R. Use .whl como o pacote personalizado de Python.

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

Para saber mais sobre como gerenciar bibliotecas de workspace, confira Gerenciar pacotes de workspace.

Gerenciar pacotes de pool

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

Ao usar os recursos de gerenciamento de pool do Azure Synapse Analytics, você pode configurar o conjunto padrão de bibliotecas a instalar em um pool do Apache Spark sem servidor. Essas bibliotecas são instaladas na parte superior do tempo de execução base.

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

Para saber mais sobre essas funcionalidades, confira Gerenciar pacotes de pool do Spark.

Importante

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

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

Observação

Não há suporte à 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 workspace 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 local do Python que seja o mesmo que o ambiente do Azure Synapse Spark. Este script requer um arquivo YAML que contenha uma lista de todas as bibliotecas incluídas no ambiente padrão do Python para o Azure Synapse Spark. Você pode encontrar esse arquivo YAML na documentação para versões específicas de runtime, como Apache Spark 3.2 (Fim de 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 transmitir seu arquivo derequirements.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 os requisitos da 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 *"
    

    Observação

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

Gerenciar pacotes no escopo da sessão

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

Os pacotes no escopo da sessão permitem que os usuários definam as dependências do pacote 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 no escopo da 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 na parte superior dos pacotes de base de tempo de execução e de pool.

Para saber mais sobre como gerenciar pacotes no escopo da sessão, confira os seguintes artigos:

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

    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 arquivos .jar a serem instalados usando %%configure.

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

Automatizar o processo de gerenciamento de biblioteca por meio de cmdlets do Azure PowerShell e APIs REST

Se sua equipe quiser gerenciar as bibliotecas sem visitar as interfaces do usuário de gerenciamento de pacotes, você terá as opções para gerenciar os pacotes de workspace e as atualizações de pacote 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:

Próximas etapas