A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


使用pyspark一些环境配置问题

基本配置
安装spark后,还需要修改Spark的配置文件spark-env.sh

cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
1
2
编辑spark-env.sh文件(vim ./conf/spark-env.sh),在第一行添加以下配置信息:

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
1
有了上面的配置信息以后,Spark就可以把数据存储到Hadoop分布式文件系统HDFS中,也可以从HDFS中读取数据。
如果没有配置上面信息,Spark就只能读写本地数据,无法读写HDFS数据。

然后通过如下命令,修改环境变量

vim ~/.bashrc
1
在.bashrc文件中添加如下内容

export JAVA_HOME=/usr/lib/jvm/default-java
export HADOOP_HOME=/usr/local/hadoop
export SPARK_HOME=/usr/local/spark
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH
export PYSPARK_PYTHON=python3
export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$PATH
1
2
3
4
5
6
PYTHONPATH环境变量主要是为了在Python3中引入pyspark库,PYSPARK_PYTHON变量主要是设置pyspark运行的python版本。
.bashrc中必须包含JAVA_HOME,HADOOP_HOME,SPARK_HOME,PYTHONPATH,PYSPARK_PYTHON,PATH这些环境变量。
如果已经设置了这些变量则不需要重新添加设置。
接着还需要让该环境变量生效,执行如下代码:

source ~/.bashrc
1
配置完成后就可以直接使用,不需要像Hadoop运行启动命令start-dfs.sh
直接在命令窗口输入pyspark进入spark的python交互式运行环境。

一些问题
如果在pycharm中运行代码失败,例如错误为

Python in worker has different version 2.7 than that in driver 3.5,
PySpark cannot run with different minor versions.
Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set
1
2
3
则需要在代码中加入运行环境

import os
#
os.environ["PYSPARK_PYTHON"] = '/usr/bin/python3'
1
2
3
或者直接修改环境变量,因为不能直接设置export PYSPARK_PYTHON=python3,
这样可能直接指向的是系统全局的设置,而不是当前用户的,所以不能像前边那样配置,需要设置成绝对路径。

export PYSPARK_PYTHON=/usr/bin/python3
1
另外,有时可能还需要分别设置driver和worker的python环境,通过下面设置下面两个变量:

driver对应的python版本就是SPARK_PYTHONPATH设置的

worker对应的python版本就是PYSPARK_PYTHON设置的
1
2
3
pycharm中使用pyspark
python安装py4j

pip install py4j
1
pycharm中配置python开发环境

其实只需要在代码中加入下面语句就可以了,这样就不用配置pycharm了,免得换一个IDE还是会出错
(主要原因还是因为系统的spark环境没配置好,如使用ssh远程登录时可能没执行spark配置的环境文件)。
如果报错:ImportError: No module named 'SocialNetworks’通过加入下面的代码就可以解决

SPARK_HOME = /home/piting/ENV/spark
PYSPARK_PYTHON = /home/piting/ENV/anaconda3/bin/python
SPARK_LOCAL_IP = 192.168.0.172

# spark environment settings
os.environ['SPARK_HOME'] = conf.get(SECTION, 'SPARK_HOME')
# Path for pyspark and py4j
sys.path.append(os.path.join(conf.get(SECTION, 'SPARK_HOME'), 'python'))
# sys.path.append("/home/piting/ENV/spark/python/lib/py4j-0.10.1-src.zip")
os.environ["PYSPARK_PYTHON"] = conf.get(SECTION, 'PYSPARK_PYTHON')
# You might need to enter your local IP
os.environ['SPARK_LOCAL_IP'] = conf.get(SECTION, 'SPARK_LOCAL_IP')

from pyspark import SparkContext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Jupyter配置
假设Spark已经配置正常,pyspark也可以正常在shell中使用了,只不过此时使用的python是系统预置的,
我们需要能够在jupyter notebook中实现pyspark程序编写,为此在当前用户的.bashrc或/etc/profile中增加配置

export PYSPARK_DRIVER_PYTHON=/webdev/app/anaconda3/bin/jupyter-notebook
export PYSPARK_DRIVER_PYTHON_OPTS=" --ip=0.0.0.0 --port=7777"
1
2
如此以来,在启动$SPARK_HOME/bin/pyspark时便可根据环境变量使用Anaconda的jupyter-notebook

注意以上export了PYSPARK_DRIVER_PYTHON与PYSPARK_DRIVER_PYTHON_OPTS两个环境变量后,非shell的pyspark 生怕认可应用也将使用者jupyter-notebook,这必然引起混乱,所以推荐的还是在pyspark的启动命令中当时指定。
如:

PYSPARK_DRIVER_PYTHON="jupyter" PYSPARK_DRIVER_PYTHON_OPTS="notebook" pyspark
1
或者再进行一些额外的配置来启动

PYSPARK_DRIVER_PYTHON=/webdev/app/anaconda3/bin/jupyter-notebook PYSPARK_DRIVER_PYTHON_OPTS=" --ip=0.0.0.0 --port=7777" pyspark --packages com.databricks:spark-csv_2.11:1.1.0 --master spark://spark_master_hostname:7077 --executor-memory 6400M --driver-memory 6400M
1
参考
---------------------
作者:Never-Giveup
来源:CSDN
原文:https://blog.csdn.net/qq_36653505/article/details/85561882
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

正序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马