前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0485-如何在代码中指定PySpark的Python运行环境

0485-如何在代码中指定PySpark的Python运行环境

作者头像
Fayson
发布2018-12-29 10:49:08
3K0
发布2018-12-29 10:49:08
举报
文章被收录于专栏:Hadoop实操Hadoop实操

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

Fayson的github: https://github.com/fayson/cdhproject

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

1

文档编写目的

Fayson在前面的文章《0483-如何指定PySpark的Python运行环境》介绍了使用Spark2-submit提交时指定Python的运行环境。也有部分用户需要在PySpark代码中指定Python的运行环境,那本篇文章Fayson主要介绍如何在代码中指定PySpark的Python运行环境。

  • 测试环境

1.RedHat7.2

2.CM和CDH版本为5.15.0

3.Python2.7.5和Python3.6

2

准备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两个安装包

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

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

代码语言:javascript
复制
[root@cdh05 anaconda2]# cd /opt/cloudera/anaconda2
[root@cdh05 anaconda2]# zip -r /data/disk1/anaconda2.zip ./*
代码语言:javascript
复制
[root@cdh05 anaconda3]# cd /opt/cloudera/anaconda3
[root@cdh05 anaconda3]# zip -r /data/disk1/anaconda3.zip ./*

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

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

代码语言:javascript
复制
[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*

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

3

准备PySpark示例作业

这里以一个简单的PI PySpark代码来做为示例讲解,该示例代码与前一篇文章有些区别增加了指定python运行环境的事例代码,示例代码如下:

代码语言:javascript
复制
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") \
    .config("spark.pyspark.python", "python/bin/python3.6") \
    .config("spark.pyspark.driver.python", "python3.6") \
    .config("spark.yarn.dist.archives", "hdfs://nameservice1/tmp/anaconda3.zip#python") \
    .config("spark.driver.memory", "2g") \
    .config("spark.executor.memory", "4g") \
    .getOrCreate()
#.config("spark.pyspark.driver.python", "/opt/cloudera/anaconda2/bin/python2.7")\

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()

4

示例运行

在运行前我们先执行加载Spark和pyspark的环境变量,否则执行python代码时会找不到“SparkSession”模块的错误,运行python代码则需要确保该节点有Spark2 Gateway客户端配置。

1.在命令执行如下命令加载Spark和python环境变量

代码语言:javascript
复制
export SPARK_HOME=/opt/cloudera/parcels/SPARK2/lib/spark2
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$SPARK_HOME/python/lib/pyspark.zip:$PYTHONPATH

2.在命令行使用python命令运行pi_test.py代码

代码语言:javascript
复制
[root@cdh05 ~]# python pi_test.py 

作业提交成功

3.作业执行成功

4.查看作业的Python环境

5

总结

使用python命令执行PySpark代码时需要确保当前执行代码的节点上有Spark的环境变量。

在运行代码前需要指定SPARK_HOME和PYTHONPATH的环境变量,将Spark编译的Python环境加载到环境变量中。

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档