Partilhar via


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.

  1. 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
    
  2. 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 e py35new 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 e py35new 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.

  3. Altere as configurações do Spark e do Livy e aponte para o ambiente virtual criado.

    1. Abra a interface do usuário do Ambari, vá para a página do Spark 2, guia Configurações.

      Change Spark and Livy config through Ambari.

    2. 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
      

      Change Livy config through Ambari.

    3. 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}
      

      Change Spark config through Ambari.

    4. 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.

      Restart services.

    5. 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 e spark.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 livyo , 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"
      }
      
  4. 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:

    Check Python version in Jupyter Notebook.

Próximos passos