Gerir com segurança o ambiente do Python no Azure HDInsight com a Ação de Script
O HDInsight tem duas instalações do Python incorporadas no cluster do Apache Spark, Anaconda Python 2.7 e Python 3.5. Os clientes podem precisar personalizar o ambiente Python como instalar pacotes Python externos. Aqui, mostramos as melhores práticas de gerenciamento seguro de ambientes Python para clusters Apache Spark no HDInsight.
Pré-requisitos
Um cluster do Apache Spark no HDInsight. Para obter instruções, veja Criar clusters do Apache Spark no Azure HDInsight. Se você ainda não tiver um cluster do Spark no HDInsight, poderá executar ações de script durante a criação do cluster. Visite a documentação sobre como usar ações de script personalizadas.
Suporte para software de código aberto usado em clusters HDInsight
O serviço Microsoft Azure HDInsight usa um ambiente de tecnologias de código aberto formado em torno do Apache Hadoop. O Microsoft Azure fornece um nível geral de suporte para tecnologias de código aberto. Para obter mais informações, consulte o site de perguntas frequentes do Suporte do Azure. O serviço HDInsight fornece um nível adicional de suporte para componentes internos.
Há dois tipos de componentes de código aberto disponíveis no serviço HDInsight:
Componente | Description |
---|---|
Incorporada | Esses componentes são pré-instalados em clusters HDInsight e fornecem a funcionalidade principal do cluster. Por exemplo, o Apache Hadoop YARN Resource Manager, a linguagem de consulta Apache Hive (HiveQL) e a biblioteca Mahout pertencem a esta categoria. Uma lista completa de componentes de cluster está disponível em Novidades nas versões de cluster do Apache Hadoop fornecidas pelo HDInsight. |
Personalizado | Você, como usuário do cluster, pode instalar ou usar em sua carga de trabalho qualquer componente disponível na comunidade ou criado por você. |
Importante
Os componentes fornecidos com o cluster HDInsight são totalmente suportados. O Suporte da Microsoft ajuda a isolar e resolver problemas relacionados a esses componentes.
Os componentes personalizados recebem suporte comercialmente razoável para ajudá-lo a solucionar ainda mais o problema. O suporte da Microsoft pode ser capaz de resolver o problema OU eles podem pedir que você envolva os canais disponíveis para as tecnologias de código aberto onde o conhecimento profundo para essa tecnologia é encontrado. Por exemplo, há muitos sites da comunidade que podem ser usados, como: Página de perguntas e respostas da Microsoft para o HDInsight, https://stackoverflow.com
. Além disso, os projetos Apache têm sites de projeto em https://apache.org
.
Compreender a instalação padrão do Python
Os clusters HDInsight Spark têm o Anaconda instalado. Existem duas instalações Python no cluster, Anaconda Python 2.7 e Python 3.5. A tabela a seguir mostra as configurações padrão do Python para Spark, Livy e Jupyter.
Definição | Python 2.7 | Python 3,5 |
---|---|---|
Caminho | /usr/bin/anaconda/bin | /usr/bin/anaconda/envs/py35/bin |
Versão do Spark | Padrão definido como 2.7 | Pode alterar a configuração para 3.5 |
Versão Livy | Padrão definido como 2.7 | Pode alterar a configuração para 3.5 |
Jupyter | Kernel PySpark | Kernel PySpark3 |
Para a versão Spark 3.1.2, o kernel Apache PySpark é removido e um novo ambiente Python 3.8 é instalado em /usr/bin/miniforge/envs/py38/bin
, que é usado pelo kernel PySpark3. As PYSPARK_PYTHON
variáveis e PYSPARK3_PYTHON
ambiente são atualizadas com o seguinte:
export PYSPARK_PYTHON=${PYSPARK_PYTHON:-/usr/bin/miniforge/envs/py38/bin/python}
export PYSPARK3_PYTHON=${PYSPARK_PYTHON:-/usr/bin/miniforge/envs/py38/bin/python}
Instalar pacotes Python externos em segurança
O cluster HDInsight depende do ambiente Python integrado, Python 2.7 e Python 3.5. A instalação direta de pacotes personalizados nesses ambientes internos padrão pode causar alterações inesperadas na versão da biblioteca. E quebrar ainda mais o cluster. Para instalar com segurança pacotes Python externos personalizados para seus aplicativos Spark, siga as etapas.
Crie um ambiente virtual Python usando conda. Um ambiente virtual fornece um espaço isolado para seus projetos sem quebrar outros. Ao criar o ambiente virtual Python, você pode especificar a versão Python que deseja usar. Você ainda precisa criar um ambiente virtual, mesmo que você gostaria de usar Python 2.7 e 3.5. Esse requisito é para garantir que o ambiente padrão do cluster não fique quebrado. Execute ações de script em seu cluster para todos os nós com o seguinte script para criar um ambiente virtual Python.
--prefix
Especifica um caminho onde um ambiente virtual Conda vive. Há várias configurações que precisam ser alteradas com base no caminho especificado aqui. Neste exemplo, usamos o py35new, pois o cluster já tem um ambiente virtual existente chamado py35.python=
especifica a versão Python para o ambiente virtual. Neste exemplo, usamos a versão 3.5, a mesma versão do cluster criado em um. Você também pode usar outras versões do Python para criar o ambiente virtual.anaconda
especifica o package_spec como anaconda para instalar pacotes Anaconda no ambiente virtual.
sudo /usr/bin/anaconda/bin/conda create --prefix /usr/bin/anaconda/envs/py35new python=3.5 anaconda=4.3 --yes
Instale pacotes Python externos no ambiente virtual criado, se necessário. Execute ações de script em seu cluster para todos os nós com o seguinte script para instalar pacotes Python externos. Você precisa ter o privilégio sudo aqui para gravar arquivos na pasta do ambiente virtual.
Pesquise no índice de pacotes a lista completa de pacotes disponíveis. Você também pode obter uma lista de pacotes disponíveis de outras fontes. Por exemplo, você pode instalar pacotes disponibilizados através do conda-forge.
Use o seguinte comando se quiser instalar uma biblioteca com sua versão mais recente:
Use o canal conda:
seaborn
é o nome do pacote que você gostaria de instalar.-n py35new
Especifique o nome do ambiente virtual que acaba de ser criado. Certifique-se de alterar o nome de forma correspondente com base na criação do seu ambiente virtual.
sudo /usr/bin/anaconda/bin/conda install seaborn -n py35new --yes
Ou use o repositório PyPi, altere
seaborn
epy35new
correspondentemente:sudo /usr/bin/anaconda/envs/py35new/bin/pip install seaborn
Use o seguinte comando se quiser instalar uma biblioteca com uma versão específica:
Use o canal conda:
numpy=1.16.1
é o nome do pacote e a versão que você gostaria de instalar.-n py35new
Especifique o nome do ambiente virtual que acaba de ser criado. Certifique-se de alterar o nome de forma correspondente com base na criação do seu ambiente virtual.
sudo /usr/bin/anaconda/bin/conda install numpy=1.16.1 -n py35new --yes
Ou use o repositório PyPi, altere
numpy==1.16.1
epy35new
correspondentemente:sudo /usr/bin/anaconda/envs/py35new/bin/pip install numpy==1.16.1
Se você não souber o nome do ambiente virtual, poderá SSH para o nó principal do cluster e executar
/usr/bin/anaconda/bin/conda info -e
para mostrar todos os ambientes virtuais.Altere as configurações do Spark e do Livy e aponte para o ambiente virtual criado.
Abra a interface do usuário do Ambari, vá para a página do Spark 2, guia Configurações.
Expanda Advanced livy2-env, adicione as seguintes instruções na parte inferior. Se você instalou o ambiente virtual com um prefixo diferente, altere o caminho correspondentemente.
export PYSPARK_PYTHON=/usr/bin/anaconda/envs/py35new/bin/python export PYSPARK_DRIVER_PYTHON=/usr/bin/anaconda/envs/py35new/bin/python
Expanda Advanced spark2-env, substitua a instrução export PYSPARK_PYTHON existente na parte inferior. Se você instalou o ambiente virtual com um prefixo diferente, altere o caminho correspondentemente.
export PYSPARK_PYTHON=${PYSPARK_PYTHON:-/usr/bin/anaconda/envs/py35new/bin/python}
Salve as alterações e reinicie os serviços afetados. Essas alterações precisam ser reiniciadas pelo serviço Spark 2. Ambari UI solicitará um lembrete de reinicialização necessário, clique em Reiniciar para reiniciar todos os serviços afetados.
Defina duas propriedades para sua sessão do Spark para garantir que o trabalho aponte para a configuração atualizada do Spark:
spark.yarn.appMasterEnv.PYSPARK_PYTHON
espark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON
.Usando o terminal ou um notebook, use a
spark.conf.set
função.spark.conf.set("spark.yarn.appMasterEnv.PYSPARK_PYTHON", "/usr/bin/anaconda/envs/py35/bin/python") spark.conf.set("spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON", "/usr/bin/anaconda/envs/py35/bin/python")
Se você estiver usando
livy
o , adicione as seguintes propriedades ao corpo da solicitação:"conf" : { "spark.yarn.appMasterEnv.PYSPARK_PYTHON":"/usr/bin/anaconda/envs/py35/bin/python", "spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON":"/usr/bin/anaconda/envs/py35/bin/python" }
Se você gostaria de usar o novo ambiente virtual criado no Jupyter. Altere as configurações do Jupyter e reinicie o Jupyter. Execute ações de script em todos os nós de cabeçalho com a seguinte instrução para apontar o Jupyter para o novo ambiente virtual criado. Certifique-se de modificar o caminho para o prefixo especificado para seu ambiente virtual. Depois de executar essa ação de script, reinicie o serviço Jupyter por meio da interface do usuário do Ambari para disponibilizar essa alteração.
sudo sed -i '/python3_executable_path/c\ \"python3_executable_path\" : \"/usr/bin/anaconda/envs/py35new/bin/python3\"' /home/spark/.sparkmagic/config.json
Você pode confirmar duas vezes o ambiente Python no Jupyter Notebook executando o código: