Como faço para atualizar minha versão do Python no Amazon EMR e configurar trabalhos do PySpark para usar a versão atualizada do Python?
Quero atualizar minha versão do Python no Amazon EMR e configurar as tarefas do PySpark para usar a versão atualizada do Python.
Breve descrição
As instâncias de cluster e as aplicações do sistema usam diferentes versões Python com base nas seguintes versões de lançamento do Amazon EMR:
- Versões de lançamento do Amazon EMR 4.6.0-5.19.0: O Python 3.4 está instalado nas instâncias do cluster. O Python 2.7 é o padrão do sistema.
- Versões de lançamento do Amazon EMR 5.20.0 e posteriores: O Python 3.6 está instalado nas instâncias do cluster. Para as versões 5.20.0-5.29.0 do Amazon EMR, o Python 2.7 é o sistema padrão. Para as versões 5.30.0 e posteriores, o Python 3 é o padrão do sistema.
- Versões de lançamento do Amazon EMR 6.0.0 e posteriores: O Python 3.7 está instalado nas instâncias do cluster. O Python 3 é o padrão do sistema.
- Versões de lançamento do Amazon EMR 7.0.0 e posteriores: O Python 3.9 está instalado nas instâncias do cluster. O Python 3 é o padrão do sistema.
Solução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Para atualizar sua versão do Python, aponte a variável de ambiente PYSPARK_PYTHON da classificação spark-env para o diretório em que a nova versão do Python está instalado:
which example-python-version
Observação: Substitua example-python-version pela sua nova versão do Python.
Atualize sua versão do Python para o Amazon EMR executada no Amazon EC2
Observação: Antes de instalar uma nova versão do Python e do OpenSSL em suas instâncias de cluster do Amazon EMR, certifique-se de testar os seguintes scripts.
Para fazer o upgrade para o Python 3.9 para o Amazon EMR versão 6.15 executado no Amazon Elastic Compute Cloud (Amazon EC2), use o script a seguir. Você também pode usar o script para atualizar para o Python 3.10 ou posterior na versão 7.0 do Amazon EMR:
sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz tar xvf example-python3-version.tgz cd example-python3-version/ ./configure --enable-optimizations sudo make altinstall
Observação: Substitua example-python3-version pela sua versão do Python 3.
O OpenSSL é necessário para fazer o upgrade para o Python 3.10 ou posterior no Amazon EMR 6.15 ou anterior. Use o seguinte script:
sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel cd /home/hadoop/ wget https://github.com/openssl/openssl/archive/refs/tags/example-openssl11-version.tar.gz tar -xzf example-openssl11-version.tar.gz cd example-openssl11-version/ ./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic make sudo make install cd /home/hadoop/ wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz tar xvf example-python3-version.tgz cd example-python3-version/ ./configure --enable-optimizations --with-openssl=/usr sudo make altinstall
Observação: Substitua example-python3-version pela versão do Python 3 e example-openssl11-version pela versão do OpenSSL 11. Para obter mais informações, consulte openssl no site do GitHub.
Para usar a versão atualizada como sua instalação padrão do Python 3, use /usr/local/bin/python3.x como sua nova localização do Python. O script Python anterior é instalado em /usr/local/bin/python3.x e a instalação padrão do Python é /usr/bin/python3.
Atualize sua versão do Python em um cluster em execução
Observação: Para as versões 5.36.0 e anteriores do Amazon EMR, você pode atualizar a versão do Python para 3.8.
Amazon EMR versão 5.21.0 ou anterior
Envie uma solicitação de reconfiguração com um objeto de configuração que seja semelhante ao seguinte:
[ { "Classification": "spark-env", "Configurations": [ { "Classification": "export", "Properties": { "PYSPARK_PYTHON": "/usr/bin/python3" } } ] } ]
Amazon EMR versão 4.6.0-5.20.x
Conclua as seguintes etapas:
- Use SSH para se conectar ao nó primário.
- Para alterar o ambiente padrão do Python, execute o comando a seguir:
Para confirmar se o PySpark usa a versão correta do Python, execute o seguinte comando:sudo sed -i -e '$a\export PYSPARK_PYTHON=/usr/bin/python3' /etc/spark/conf/spark-env.sh
Observação: Substitua example-ip-address pelo seu endereço IP.[hadoop@example-ip-address conf]$ pyspark
Exemplo de saída:Python 3.4.8 (default, Apr 25 2018, 23:50:36) Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /__ / .__/\_,_/_/ /_/\_\ version 2.3.1 /_/ Using Python version 3.4.8 (default, Apr 25 2018 23:50:36) SparkSession available as 'spark'.
Observação: A nova configuração entra em vigor no próximo trabalho do PySpark.
Atualize sua versão do Python em um novo cluster
Para atualizar sua versão do Python ao iniciar um cluster no Amazon EMR, adicione uma ação de bootstrap ao script que você usa.
Para fazer o upgrade para o Python 3.9 para o Amazon EMR versão 6.15 que é executado no Amazon EC2, use o script a seguir. Você também pode usar o script para atualizar para o Python 3.10 ou posterior na versão 7.0 do Amazon EMR:
sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz tar xvf example-python3-version.tgz cd example-python3-version/ ./configure --enable-optimizations sudo make altinstall
Observação: Substitua example-python3-version pela sua versão do Python 3.
O OpenSSL é necessário para fazer o upgrade para o Python 3.10 ou posterior no Amazon EMR 6.15 e versões anteriores. Use o seguinte script:
sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel cd /home/hadoop/ wget https://github.com/openssl/openssl/archive/refs/tags/example-openssl11-version.tar.gz tar -xzf example-openssl11-version.tar.gz cd example-openssl11-version/ ./config —prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic make sudo make install cd /home/hadoop/ wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz tar xvf example-python3-version.tgz cd example-python3-version/ ./configure --enable-optimizations --with-openssl=/usr sudo make altinstall
Observação: Substitua example-python3-version pela versão do Python 3 e example-openssl11-version pela versão do OpenSSL 11. Para obter mais informações, consulte openssl no site do GitHub.
Em seguida, adicione um objeto de configuração semelhante ao seguinte:
[ { "Classification": "spark-env", "Configurations": [ { "Classification": "export", "Properties": { "PYSPARK_PYTHON": "<example-python-version-path>" } } ] } ]
Atualize sua versão do Python no Amazon EMR no Amazon EKS
**Observação:**As imagens baseadas no Amazon Linux 2023 contêm al2023 no nome. Além disso, o Amazon EMR 6.13.0 e versões posteriores usam o Python 3.9.16 por padrão em imagens baseadas no Amazon Linux 2023. Para imagens baseadas no Amazon Linux 2, o Python 3.7 é a versão padrão.
Para atualizar sua versão do Python para o Amazon EMR no Amazon Elastic Kubernetes Service (Amazon EKS), é necessária uma imagem do docker. Selecione um URI base para sua região da AWS:
FROM example-base-URI-account-id.dkr.ecr.example-region.amazonaws.com/spark/emr-6.15.0 USER root RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel tar gzip wget make RUN wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz && \ tar xzf example-python3-version.tgz && cd example-python3-version && \ ./configure --enable-optimizations && \ make altinstall USER hadoop:hadoop
Observação: Substitua example-base-URI-account-id pelo ID da conta base para imagens do Apache Spark, example-region pela sua região e example-python3-version pela versão do Python.
Para transmitir uma imagem ao enviar um workload do Spark, use substituições de configuração da aplicação, um driver do Spark e uma imagem primária do pod:
{ "classification": "spark-defaults", "properties": { "spark.kubernetes.container.image": "example-account-id.dkr.ecr.example-region.amazonaws.com/example-repository" } }
Observação: Substitua example-account-id pelo ID da conta que está armazenando a imagem criada, example-repository pelo nome do seu repositório que está armazenando a imagem personalizada e example-region pela sua região.
Atualize sua versão do Python no Amazon EMR Sem Servidor
Para atualizar sua versão do Python em uma aplicação Amazon EMR Sem Servidor, use uma imagem do docker para instalar a nova versão do Python:
FROM public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest USER root # install python 3 RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel tar gzip wget make RUN wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz && \ tar xzf example-python3-version.tgz && cd example-python3-version && \ ./configure --enable-optimizations && \ make altinstall # EMRS will run the image as hadoop USER hadoop:hadoop
Observação: Substitua example-python-version pela sua versão do Python 3.
Ao enviar um trabalho do Spark para uma aplicação do Amazon EMR Sem Servidor, passe o seguinte caminho para usar a nova versão do Python:
--conf spark.emr-serverless.driverEnv.PYSPARK_DRIVER_PYTHON=/usr/local/bin/python3.9 --conf spark.emr-serverless.driverEnv.PYSPARK_PYTHON=/usr/local/bin/python3.9 --conf spark.executorEnv.PYSPARK_PYTHON=/usr/local/bin/python3.9
Informações relacionadas
Detalhes para selecionar um URI de imagem base
Usando imagens personalizadas com o EMR de tecnologia sem servidor
Conteúdo relevante
- feita há 10 diaslg...
- Resposta aceitafeita há 7 diaslg...
- feita há 10 diaslg...
- feita há 23 diaslg...
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 8 meses
- AWS OFICIALAtualizada há 4 meses