暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pyspark 打包的三种方式

小王的技术blog 2021-08-15
4019

最近在使用pyspark,写完程序放到集群里跑的时候,会碰到

no module named 'xxx'

搜索后,发现pyspark包管理的方式有三种

  1. conda

  1. pex

  1. virtual env

conda

conda是python常用的打包工具, 可以通过conda-forge命令行工具,创建conda运行环境

# -c 后面接需要依赖的第三方库
conda create -y -n pyspark_libs -c conda-forge pyarrow pandas conda-pack

conda activate pyspark_libs

conda pack -f -o pyspark_libs.tar.gz

提交到spark集群的时候, 需要通过--archives指定

spark-submit --archives pyspark_libs.tar.gz xxx


Virtualenv

virtualenv 是一个python工具来创建隔离环境, 通过venv-pack打包工具(与conda的conda-forge类似), 来管理python依赖,  它将现在环境打包成一个压缩文件.

python -m venv pyspark_venv
source pyspark_venv/bin/activate
pip install pyarrow pandas venv-pack
venv-pack -o pyspark_venv.tar.gz

同样在spark-submit的时候指定

spark-submit --archives pyspark_libs.tar.gz xxx


pex

pex是我比较喜欢的一个打包工具, 将python环境和依赖打包成一个可执行文件

使用方式也比较简单

#安装pex
pip install pex

#选择依赖包
pex pyspark pyarrow pandas -o pyspark_pex_env.pex

测试下, 运行可执行文件

./pyspark_pex_env.pex -c "import pandas; print(pandas.__version__)"
1.5.0

spark-submit 通过--files参数提交

spark-submit --files pyspark_pex_env.pex

最后强烈推荐下cluster-pack
这个库, 它基于pex,已经集成好与spark, dask等分布式服务的打包配置

🔗 https://github.com/criteo/cluster-pack

示例


import cluster_pack
from cluster_pack.spark import spark_config_builder

if __name__ == "__main__":

   # pex打包后的路径
   package_path, _ = cluster_pack.upload_env()

   ssb = SparkSession.builder \
      .appName("spark_app") \
      .master("yarn") \
      .config("spark.submit.deployMode", "client") \
      .config("spark.driver.memory", "1g") \
      .config("spark.executor.memory", "1g") \
      .config("spark.executor.memoryOverhead", "1g") \
      .config("spark.executor.cores", "1") \
      .config("spark.acls.enable", "true") \
      .config("spark.ui.view.acls", "*")

   # 引用pex打包后的路径
   spark_config_builder.add_packaged_environment(ssb, package_path)
   spark_config_builder.add_editable_requirements(ssb)

   # sparksession instantance
   ss = ssb.getOrCreate()


文章转载自小王的技术blog,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论