Abd*_*man 5 virtualenv python-3.x hadoop-yarn python-venv pyspark
我正在尝试让我的 pyspark 应用程序在纱线集群上运行。该应用程序使用某些需要 python3 的库。但是yarn集群使用python2并且没有安装python3。有没有办法将我的 pyspark 应用程序与 python3 和所有核心 python3 库打包。
我一直按照这些步骤大致创建虚拟环境
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r requirements.txt
venv-pack -o environment.tar.gz
/usr/bin/spark-submit --master yarn --executor-cores 1 --num-executors 15 --queue wesp_dev --deploy-mode cluster --conf "spark.driver.extraJavaOptions=-DENVIRONMENT=pt" --conf "spark.executor.extraJavaOptions=-DENVIRONMENT=pt" --name "EndpointAttackDetectionEngine" --class com.telus.endpointAttackDetectionEngine.AppMain --keytab $KEY_TAB --principal $PRINCIPAL --driver-memory=4G --archives environment.tar.gz#environment --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./environment/bin/python --conf spark.executorEnv.LD_LIBRARY_PATH=./environment/lib/ --conf spark.yarn.appMasterEnv.LD_LIBRARY_PATH=./environment/lib/ test.py
Run Code Online (Sandbox Code Playgroud)
但是,当我按照上述步骤创建虚拟环境时出现了很多问题
spark.executorEnv.LD_LIBRARY_PATH=./environment/lib/指定它spark.yarn.appMasterEnv.LD_LIBRARY_PATH=./environment/lib/Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'现在,当我在纱线集群中运行 pysark 应用程序时,我陷入困境。我从 /usr/lib64/python3.6 手动复制了 python3 的编码和其他核心模块,但没有解决问题。所有这些让我相信,当我用 venv 打包我的环境时,我缺少了一些东西。必须有更好的方法来做到这一点。
小智 3
我最近也遇到了同样的情况。
当您想在未安装 Python3 的集群中使用 Python3 中的 pyspark 时,您确实可以遵循使用 virtualenv 的策略。
但是,您必须仔细选择构建 virtualenv 的工具。正如您所注意到的,通常的 virtualenv 命令并没有完全打包所需的 Python3 文件。
通过基于 conda Python3 的 virtualenv,我成功地在 Python2.7 纱线集群内以纱线集群和客户端模式使用 pyspark。
这是我的分步指南:
docker pull centos:centos7
docker run --entrypoint "/bin/sh" -it <image_id_centos:centos7>
Run Code Online (Sandbox Code Playgroud)
yum install bzip2
curl -O https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh
bash Anaconda3-5.3.1-Linux-x86_64.sh
source ~/.bashrc
conda update conda
conda create -n myvenv python=3.6 anaconda
conda activate myvenv
conda install -n myvenv pip
pip install -r requirements.txt
cd /root/anaconda3/envs/myvenv
tar zcvf myvenv.tar.gz *
Run Code Online (Sandbox Code Playgroud)
docker cp <container-id>:/root/anaconda3/envs/myvenv/myvenv.tar.gz ~/Downloads
Run Code Online (Sandbox Code Playgroud)
不要忘记将其标记为#ENV 并在spark.pyspark.python 和spark.pyspark.driver.python conf 选项中使用该标记。
${SPARK_HOME}/bin/spark-submit \
--master ${CLUSTER_MANAGER} \
--deploy-mode ${DEPLOY_MODE} \
--num-executors ${NUM_EXECUTORS} \
--driver-memory ${DRIVER_MEMORY} \
--executor-memory ${EXECUTOR_MEMORY} \
--executor-cores ${EXECUTOR_CORES} \
--archives ./myvenv.tar.gz#ENV \
--conf spark.pyspark.python=./ENV/bin/python \
--conf spark.pyspark.driver.python=./ENV/bin/python \
--py-files my_project.zip \
main.py "$@"
Run Code Online (Sandbox Code Playgroud)