0
点赞
收藏
分享

微信扫一扫

0483-如何指定PySpark的Python运行环境

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


Fayson的github:

​​https://github.com/fayson/cdhproject​​


提示:代码块部分可以左右滑动查看噢



1

文档编写目的


在使用PySpark进行开发时,由于不同的用户使用的Python环境不同,有基于Python2的开发也有基于Python3的开发,这个时候会开发的PySpark作业不能同时兼容Python2和Python3环境从而导致作业运行失败。那Fayson接下来介绍如何在提交PySpark作业时如何指定Python的环境。


本文档就主要以Spark2的为例说明,Spark1原理相同。


  • 测试环境

1.RedHat7.2

2.CM和CDH版本为5.15.0

3.Python2.7.5和Python3.6


2

准备PySpark示例作业


这里以一个简单的PI PySpark代码来做为示例讲解,示例代码如下:


from __future__ import print_function
import sys
from random import random
from operator import add
from pyspark.sql import SparkSession

spark = SparkSession \
.builder \
.appName("PythonPi") \
.getOrCreate()

partitions = int(sys.argv[1]) if len(sys.argv) > 1 else 2
n = 100000 * partitions

def f(_):
x = random() * 2 - 1
y = random() * 2 - 1
return 1 if x ** 2 + y ** 2 < 1 else 0

count = spark.sparkContext.parallelize(range(1, n + 1), partitions).map(f).reduce(add)
print("Pi is roughly %f" % (4.0 * count / n))

spark.stop()


3

准备Python环境


在这里Fayson准备两个环境Python2和Python3,如下为环境准备步骤:


1.在Anaconda官网下载Python2和Python3的两个安装包,安装过程Fayson这里就不再介绍了


Anaconda3-5.2.0-Linux-x86_64.sh和Anaconda2-5.3.1-Linux-x86_64.sh两个安装包


0483-如何指定PySpark的Python运行环境_python


2.将Python2和Pythonn3两个环境打包,进入到Python2和Python3的安装目录下


使用zip命令将两个环境分别打包


[root@cdh05 anaconda2]# cd /opt/cloudera/anaconda2
[root@cdh05 anaconda2]# zip -r /data/disk1/anaconda2.zip ./*


0483-如何指定PySpark的Python运行环境_spark_02


[root@cdh05 anaconda3]# cd /opt/cloudera/anaconda3
[root@cdh05 anaconda3]# zip -r /data/disk1/anaconda3.zip ./*


0483-如何指定PySpark的Python运行环境_python_03


注意:这里是进入到Python的安装目录下进行压缩的,没有带上Python的父目录


3.将准备好的Python2和Python3上传至HDFS


[root@cdh05 disk1]# hadoop fs -put anaconda2.zip /tmp
[root@cdh05 disk1]# hadoop fs -put anaconda3.zip /tmp
[root@cdh05 disk1]# hadoop fs -ls /tmp/anaconda*


0483-如何指定PySpark的Python运行环境_spark_04


完成以上步骤则准备好了PySpark的运行环境,接下来在提交代码时指定运行环境。


4

指定PySpark运行环境


1.将当前的Spark2 Gateway节点下/etc/spark2/conf/spark-default.conf配置文件拷贝一份


[root@cdh05 disk1]# hadoop fs -put anaconda2.zip /tmp
[root@cdh05 disk1]# hadoop fs -put anaconda3.zip /tmp
[root@cdh05 disk1]# hadoop fs -ls /tmp/anaconda*


0483-如何指定PySpark的Python运行环境_spark_05


2.在拷贝的spark-default.conf文件中增加如下配置


spark.pyspark.python=python/bin/python2.7
spark.pyspark.driver.python=/opt/cloudera/anaconda2/bin/python2.7
spark.yarn.dist.archives=hdfs://nameservice1/tmp/anaconda2.zip#python


0483-如何指定PySpark的Python运行环境_python_06


注意:spark.yarn.dist.archives参数后面的“#python”不能缺少,该值用于spark.pyspark.python该参数最前面的“python”。


3.使用spark2-submit命令提交pi.py作业测试运行的Python环境


spark2-submit --master yarn \
--driver-memory 4G --executor-memory 4G \
--properties-file spark-defaults.conf \
pi.py


0483-如何指定PySpark的Python运行环境_python_07


作业提交成功


0483-如何指定PySpark的Python运行环境_hadoop_08


作业执行成功


0483-如何指定PySpark的Python运行环境_spark_09


4.查看作业运行的Python环境


0483-如何指定PySpark的Python运行环境_hadoop_10


5.将执行环境修改为Python3测试


0483-如何指定PySpark的Python运行环境_python_11


作业提交成功


0483-如何指定PySpark的Python运行环境_spark_12


作业运行成功


0483-如何指定PySpark的Python运行环境_hadoop_13


查看作业的运行环境


0483-如何指定PySpark的Python运行环境_python_14


5

总结


在指定PySpark运行的Python环境时,spark.pyspark.python和spark.yarn.dist.archives两个参数主要用于指定Spark Executor的Python环境,spark.pyspark.driver.python参数主要用于指定当前Driver的运行环境,该配置配置的为当前运行Driver节点的Python路径。


在将PySpark的运行环境Python2和Python3打包放在HDFS后,作业启动的过程会比以往慢一些,需要从HDFS获取Python环境。


提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

0483-如何指定PySpark的Python运行环境_python_15



举报

相关推荐

0 条评论