Virtualenv в aws emr без сервера
Я пытаюсь запустить некоторые задания на aws cli, используя виртуальную среду, в которой я установил некоторые библиотеки. Я следовал этому руководству ; то же самое здесь . Но когда я запускаю задание, у меня есть эта ошибка:
Job execution failed, please check complete logs in configured logging destination. ExitCode: 1. Last few exceptions: Caused by: java.io.IOException: error=2, No such file or directory Exception in thread "main" java.io.IOException: Cannot run program "./environment/bin/python"
я тоже пробовал/home/hadoop/environment/bin/python
как путь, но я получаю тот же результат. Мои рабочие конфы:
--conf spark.archives=s3://mybucket/dependencies/myenv.tar.gz#environment --conf spark.emr-serverless.driverEnv.PYSPARK_DRIVER_PYTHON=./environment/bin/python --conf spark.emr-serverless.driverEnv.PYSPARK_PYTHON=./environment/bin/python --conf spark.emr-serverless.executorEnv.PYSPARK_PYTHON=./environment/bin/python
Если я бегу на работу
os.listdir("./environment/bin/)
Результат
['python3.9', 'pip', 'pip3.9', 'rst2xetex.py', 'rstpep2html.py', 'f2py3', 'rst2latex.py', 'f2py', 'rst2odt.py', 'rst2html4.py', 'pip3', 'aws', 'python3', 'jp.py', 'rst2odt_prepstyles.py', 'pyrsa-encrypt', 'activate', 'rst2man.py', 'pyrsa-priv2pub', 'python', 'pyrsa-keygen', 'pyrsa-verify', 'rst2html.py', 'aws_completer', 'f2py3.9', 'venv-pack', 'rst2pseudoxml.py', 'aws_bash_completer', 'aws_zsh_completer.sh', 'aws.cmd', 'rst2s5.py', 'rst2xml.py', 'pyrsa-decrypt', 'rst2html5.py', 'Activate.ps1', '__pycache__', 'pyrsa-sign']
Так что путь должен быть правильным. Я также попытался установить PYSPARK_DRIVER_PYTHON внутри скрипта как
os.environ['PYSPARK_PYTHON'] = "./environment/bin/python"
os.environ['PYSPARK_DRIVER_PYTHON'] = "./environment/bin/python"
Но в этом случае ошибка возникает, когда я импортирую библиотеки, которые я установил в virtualenv, поэтому он запускает скрипт со стандартным python.
Вы можете помочь мне?
1 ответ
Проблема в том, что вы, вероятно, не использовали Amazon Linux 2 для создания файла venv. Использование Amazon Linux и Python 3.7.10 помогло мне.
Как подробно описано здесь, вы можете использовать аналогичный этому файлу докера для создания такого файла venv. вам лучше использоватьrequirements.txt
чтобы сделать его более многоразовым, но это дает вам идею.
FROM --platform=linux/amd64 amazonlinux:2 AS base
RUN yum install -y python3
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN python3 -m pip install --upgrade pip && \
python3 -m pip install \
great_expectations==0.15.6 \
venv-pack==0.2.0
RUN mkdir /output && venv-pack -o /output/pyspark_ge.tar.gz
FROM scratch AS export
COPY --from=base /output/pyspark_ge.tar.gz /