Spark on Yarn 之Python环境定制

1 动机

不同用户的应用程序使用的python版本及需要的python依赖可能存在不同,若每次缺少依赖都请op去update所有节点,对于大集群的维护来说相对比较困难,而且走变更流程等还影响spark 用户的工作效率。

为解决上述问题,我们探索一种用户可自定义Python环境的方法,用户可依据自己的需要,定制自己的python 并做简单指定即可。

2 方法

2.1 构建Python

//下载Python源码
wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz   
//解压
tar -zxvf Python-2.7.15.tgz
//编译  
./Python-2.7.15/configure --prefix=/home/barrenlake/tmp/python-2.7.15 --with-zlib-dir=/usr/local/lib # 指定打包路径  
make && make install

2.2 安装依赖

使用Python的包管理工具pip安装依赖,若无pip请自行安装。

pip install -t /home/barrenlake/tmp/python-2.7.15/lib/python2.7/site-packages <依赖包名>  
// -t 指定安装路径

2.3 打包

//进入python根目录, 注意打包路径决定下面的spark配制方式。ll 
cd /home/barrenlake/tmp/python-2.7.15  
tar -zcf python-2.7.15.tgz *

3. Spark 配制

因客户机存在公用的可能,且每个应用程序的需求不同,为了降低不同用户之间的影响,我们推荐在提交命令中配制的作法。

3.1 上传python-2.7.15至Spark Executor工作目录

//submit提交脚本中指定(“#” 指的是符号连接,与submit 命令中指定的“spark.pyspark.python”路径方式有关)
--conf spark.yarn.dist.archives=file:/home/barrenlake/tmp/python-2.7.15/python-2.7.15.tgz#python-2.7.15
或
直接上传hdfs目录

3.2 Python目录指定

备注:因3.1中指定的变量,会将python-2.7.15.tgz上传至Spark Executor工作目录,随后Executor在准备启动环境时会将其加载到工作目录中,因此python路径可从当前路径“.”指定。

  • 提交脚本中指定
//driver端配制
--conf spark.pyspark.driver.python = /home/barrenlake/tmp/python-2.7.15/bin/python

//executor端配制
--conf spark.pyspark.python = ./python-2.7.15/bin/python

4 应用提交示例

  • client模式
    Driver在用户提交宿主机运行,提交机和线上集群环境可能存在差异,因此,区分配制两端的python环境(若相同只须指定“spark.pyspark.python”即可)。
spark-submit <spark-shell>
--conf spark.yarn.dist.archives=/home/barrenlake/tmp/python-2.7.15/python-2.7.15.tgz#python-2.7.15 \  
--conf spark.pyspark.driver.python = /home/barrenlake/tmp/python-2.7.15/bin/python \
--conf spark.pyspark.python = ./python-2.7.15/bin/python \
pi.py \
1000

  • cluster 模式
    Driver运行在ApplicationMaster, 而ApplicationMaster运行在Executor(container)中,因此,可视为Driver和Executor环境统一,只需要配制spark.pyspark.python即可。
spark-submit <spark-shell>
--conf spark.yarn.dist.archives=/home/barrenlake/tmp/python-2.7.15/python-2.7.15.tgz#python-2.7.15 \  
--conf spark.pyspark.python = ./python-2.7.15/bin/python \
pi.py \
1000

注意:“#” 指的是符号连接,与submit 命令中指定的“spark.pyspark.python”路径方式有关。

5 缺点分析

上述方案虽可实现用户自定义python环境,但执行过程中每个Executor从HDFS下载一次python环境,增加RPC等开销,在开启动态资源伸缩功能时,下载次数会更多……

    原文作者:barrenlake
    原文地址: https://www.jianshu.com/p/d77e16008957
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞