Solucionar problemas referentes a erros de instalação de bibliotecas
Para disponibilizar códigos de terceiros ou compilados para seus aplicativos, você pode instalar uma biblioteca em um dos Pools do Apache Spark sem servidor. Os pacotes listados no arquivo requirements.txt são baixados do PyPi no momento da inicialização do pool. Esse arquivo de requisitos é usado toda vez que uma instância do Spark é criada a partir desse Pool do Spark. Depois que uma biblioteca é instalada para um Pool do Spark, ela fica disponível para todas as sessões que usam o mesmo pool.
Em alguns casos, você pode perceber que uma biblioteca não está aparecendo no Pool do Apache Spark. Isso geralmente ocorre quando há um erro no requirements.txt fornecido ou em bibliotecas específicas. Quando ocorrer um erro no processo de instalação da biblioteca, o Pool do Apache Spark será revertido para bibliotecas especificadas no tempo de execução base do Synapse.
O objetivo deste documento é apreciar problemas comuns e ajudá-lo a depurar erros de instalação de bibliotecas.
Forçar atualização do Pool do Apache Spark
Quando você atualizar as bibliotecas em seu Pool do Apache Spark, essas alterações serão coletadas depois que o pool for reiniciado. Se você tiver trabalhos ativos, esses trabalhos continuarão a ser executados na versão original do Pool do Spark.
Você pode forçar as alterações a serem aplicadas selecionando a opção Forçar as novas configurações. Essa configuração encerrará todas as sessões atuais para o Pool do Spark selecionado. Depois que as sessões forem encerradas, você precisará aguardar até que o pool seja reiniciado.
Acompanhar o progresso da instalação
Um trabalho do Spark reservado pelo sistema é iniciado cada vez que um pool é atualizado com um novo conjunto de bibliotecas. Esse trabalho do Spark ajuda a monitorar o status da instalação de bibliotecas. Se a instalação falhar devido a conflitos de biblioteca ou outros problemas, o Pool do Spark será revertido para seu estado anterior ou padrão.
Além disso, os usuários também podem inspecionar os logs de instalação para identificar conflitos de dependências ou ver quais bibliotecas foram instaladas durante a atualização do pool.
Para exibir esses logs:
- Navegue até a lista de aplicativos Spark na guia Monitorar.
- Selecione o trabalho do aplicativo Spark do sistema que corresponde à sua atualização de pool. Esses trabalhos do sistema são executados sob o título SystemReservedJob-LibraryManagement.
- Alterne para exibir os logs de Driver e stdout.
- Nos resultados, você verá os logs relacionados à instalação dos seus pacotes.
Acompanhar falhas de instalação
Em determinados casos, os usuários também podem inspecionar os logs de instalação completa disponíveis no Servidor de Histórico do Spark para identificar conflitos de dependência complicados. Os logs disponíveis por meio da interface do usuário do Spark podem ser truncados e acessar os logs de instalação completa por meio do Servidor de Histórico do Spark seria útil em cenários complexos de instalação de biblioteca.
Para exibir os logs de instalação completa:
- Navegue até a lista de aplicativos Spark na guia Monitorar.
- Selecione o trabalho do aplicativo Spark do sistema que corresponde à atualização de pool com falha. Esses trabalhos do sistema são executados sob o título SystemReservedJob-LibraryManagement.
- Selecione a opção Servidor de histórico do Spark que abriria a página de detalhes do servidor de histórico do Spark em uma nova guia.
- Nesta página, você verá duas tentativas, selecione Tentativa 1, conforme mostrado abaixo.
- Na barra de navegação superior na página de servidor de histórico do Spark, mude para a guia Executores.
- Baixe os arquivos de log stdout e stderr para acessar a saída de gerenciamento de biblioteca completa e os logs de erros.
Valide suas permissões
Para instalar e atualizar bibliotecas, você deve ter as permissões de Colaborador de dados de blob de armazenamento ou Proprietário de Dados do blob de Armazenamento na conta primária de armazenamento do Azure Data Lake Storage Gen2 vinculada ao espaço de trabalho do Azure Synapse Analytics.
Para validar que você tem essas permissões, você pode executar o seguinte código:
from pyspark.sql.types import StructType,StructField, StringType, IntegerType
data2 = [("James","Smith","Joe","4355","M",3000),
("Michael","Rose","Edward","40288","F",4000)
]
schema = StructType([ \
StructField("firstname",StringType(),True), \
StructField("middlename",StringType(),True), \
StructField("lastname",StringType(),True), \
StructField("id", StringType(), True), \
StructField("gender", StringType(), True), \
StructField("salary", IntegerType(), True) \
])
df = spark.createDataFrame(data=data2,schema=schema)
df.write.csv("abfss://<<ENTER NAME OF FILE SYSTEM>>@<<ENTER NAME OF PRIMARY STORAGE ACCOUNT>>.dfs.core.windows.net/validate_permissions.csv")
Se você receber um erro, provavelmente você não tem as permissões necessárias. Para saber como obter as permissões necessárias, visite este documento: Atribuir permissões de Colaborador de dados de blob de armazenamento ou Proprietário de Dados do blob de Armazenamento.
Além disso, se você estiver executando um pipeline, o MSI do espaço de trabalho também deverá ter permissões de Colaborador de dados do blob de armazenamento ou Proprietário de Dados do blob de Armazenamento. Para saber como conceder essa permissão à identidade do seu espaço de trabalho, visite: Conceder permissões para a identidade gerenciada do espaço de trabalho.
Verifique o arquivo de configuração de ambiente
Você pode usar um arquivo de configuração de ambiente para atualizar o ambiente Conda. Os formatos de arquivo aceitáveis para o gerenciamento de pools do Python estão listados como Especificações de ambiente.
É importante observar as seguintes restrições:
- O conteúdo do arquivo de requisitos não deve incluir linhas ou caracteres em branco extras.
- O Runtime do Synapse inclui um conjunto de bibliotecas que são pré-instaladas em todos os Pools do Apache Spark sem servidor. Os pacotes que vêm pré-instalados no runtime de base não podem ser removidos ou desinstalados.
- Não há suporte para a alteração da versão PySpark, Python, Scala/Java, .NET ou Spark.
- As bibliotecas com escopo em sessão do Python só aceitam arquivos com extensão YML.
Valide arquivos wheels
Os Pools do Apache Spark sem servidor do Synapse se baseiam na distribuição Linux. Ao baixar e instalar arquivos wheels diretamente do PyPI, certifique-se de selecionar a versão criada no Linux e executada na mesma versão do Python que o Pool do Spark.
Importante
Os pacotes personalizados podem ser adicionados ou modificados entre sessões. No entanto, você precisará aguardar a reinicialização do pool e da sessão para ver o pacote atualizado.
Verifique conflitos de dependência
Em geral, a resolução de dependência do Python pode ser difícil de gerenciar. Para ajudar a depurar conflitos de dependência localmente, você pode criar seu próprio ambiente virtual com base no Runtime do Synapse e validar suas alterações.
Para recriar o ambiente e validar suas atualizações:
Baixe o modelo para recriar localmente o runtime do Synapse. Pode haver pequenas diferenças entre o modelo e o ambiente Synapse real.
Crie um ambiente virtual usando as instruções a seguir. Esse ambiente possibilita a criação de uma instalação isolada do Python com a lista de bibliotecas especificada.
conda myenv create -f environment.yml conda activate myenv
Use
pip install -r <provide your req.txt file>
para atualizar o ambiente virtual com os pacotes especificados. Se a instalação der erro, poderá haver conflito entre o que é pré-instalado no Runtime de Synapse base e o que é especificado no arquivo de requisitos fornecido. Esses conflitos de dependência devem ser resolvidos para ter as bibliotecas atualizadas em seu Pool do Apache Spark sem servidor.
Importante
Podem ocorrer problemas ao usar pip e conda juntos. Ao combinar Pip e Conda, é melhor seguir essas melhores práticas.
Próximas etapas
- Exibir as bibliotecas padrão: suporte à versão do Apache Spark