Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用virtualenv(包括python3解释器)打包pyspark代码?_Python 3.x_Pyspark_Virtualenv_Yarn_Python Venv - Fatal编程技术网

Python 3.x 如何使用virtualenv(包括python3解释器)打包pyspark代码?

Python 3.x 如何使用virtualenv(包括python3解释器)打包pyspark代码?,python-3.x,pyspark,virtualenv,yarn,python-venv,Python 3.x,Pyspark,Virtualenv,Yarn,Python Venv,我正在尝试让我的pyspark应用程序在纱线集群上运行。应用程序使用某些需要python3的库。但是,纱线簇使用python2,未安装python3。有没有办法用python3和所有python3核心库打包我的pyspark应用程序 我一直在按照这些步骤创建虚拟环境 virtualenv -p /usr/bin/python3 venv/ source venv/bin/activate pip install -r requirements.txt venv-pack -o environme

我正在尝试让我的pyspark应用程序在纱线集群上运行。应用程序使用某些需要python3的库。但是,纱线簇使用python2,未安装python3。有没有办法用python3和所有python3核心库打包我的pyspark应用程序

我一直在按照这些步骤创建虚拟环境

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 
但是,当我按照上面的步骤创建虚拟环境时,会出现许多问题

  • 我注意到venv/bin/python中的python解释器与/usr/bin/python符号链接。我不得不手动删除符号链接,然后复制python解释器。因为集群在/usr/bin/python处不会有python3
  • libpython3.6m.so.1.0不见了。Pyspark应用程序最初就是因为这个原因而失败的。我手动将其复制到venv/lib/中,并在spark submit中的
    spark.ExecuteEnv.LD_LIBRARY_路径=./environment/lib/
    spark.Thread.appMasterEnv.LD_LIBRARY_路径=./environment/lib/
    中指定它
  • 现在我陷入了
    致命的Python错误:Py\u Initialize:无法获取区域设置编码
    ModuleNotFoundError:在纱线集群中运行pysark应用程序时,没有名为“encodings”的模块。
    。我从/usr/lib64/python3.6手动复制了python3的编码和其他核心模块,但没有解决这个问题
    所有这些让我相信,当我用venv打包我的环境时,我遗漏了一些东西。必须有更好的方法来做到这一点。

    我最近也遇到了同样的情况

    当您想在未安装Python3的集群中使用Python3中的pyspark时,您确实可以遵循使用virtualenv的策略

    但是,您必须仔细选择构建virtualenv的工具。正如您所注意到的,通常的virtualenv命令并没有完全打包所需的Python3文件

    使用基于conda Python3的virtualenv,我成功地在Python2.7纱线集群中以纱线集群和客户端模式使用了pyspark

    这是我的分步指南:

  • 创建docker centos 7容器
  • 从docker容器中提取myvenv virtualenv

  • 打包独立python程序的更好工具是pex。如果您还必须打包解释器,那么您将需要更高级的工具。我相信我可以做这样的事情,可能还有其他人(等等)你好,有什么答案吗?我也有同样的问题。
    docker pull centos:centos7
    docker run --entrypoint "/bin/sh" -it <image_id_centos:centos7>
    
    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 *
    
    docker cp <container-id>:/root/anaconda3/envs/myvenv/myvenv.tar.gz ~/Downloads
    
    ${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 "$@"