linux配置jupyter连接大数据集群spark,并配置jupyter任务资源

最近一直在用pyspark开发大数据项目,但每次报错都要重新提交spark-submit执行任务,效率实低,在网上搜索发现能够配置jupyter实现spark交互,测试了一下,真是相见恨晚!
现有环境:
系统:linux;
集群:多结点大数据集群;
整个过程的操纵步骤:
下载anaconda——配置jupyter——配置环境信息!done。
因为spark集群中自带的python是python2,所以为了方便,建议用python2。(不然每个结点都需要配置python,麻烦都一批)
因为已经存在大数据集群,直接进行anaconda安装。

一、安装anaconda+配置jupyter

在一个结点的服务器上安装anaconda,过程可直接参考我的另一篇文章:linux 安装anaconda与jupyter notebook配置

!!!有两种方法:一种是中环境变量中配置信息(二);另一种是不配置,在提交命令时直接定义(三)。

二、配置环境信息

要定义的信息主要有:SPARK_HOME、PYTHONPATH、py4j路径PYSPARK_PYTHON、PYSPARK_DRIVER_PYTHON、PYSPARK_DRIVER_PYTHON_OPTS
先看一下完整的路径信息,后面再逐一解释。
进入到ananconda的安装目录下,修改/.bashrc文件

vim ~/.bashrc

修改配置如下信息

export SPARK_HOME=/opt/cloudera/parcels/SPARK2/lib/spark2
export PYTHONPATH=/opt/cloudera/parcels/SPARK2/lib/spark2/python:$PYTHONPATH #pythonpath指向spark目录下的python文件夹
export PYTHONPATH=/opt/cloudera/parcels/SPARK2/lib/spark2/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH # 指向py4j包,没有的话下载一个
export PYSPARK_PYTHON=python 
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"

保存配置信息

source ~/.bashrc

验证:在终端输入pyspark,若打开了对应的jupyter,则配置成功。(在打开后界面会给出对应的端口信息)

详细配置信息
SPARK_HOME
SPARK_HOME对应集群中的spark路径,注意,要确保路径的精准。在最后一个目录下用ls查看,确保有python文件夹,不然的话会出现报错。
一开始我定义的路径:
export SPARK_HOME=/opt/cloudera/parcels/SPARK2
这个路径信息是我在提交spark-submit的路径信息,但一直会报错:.../pyspark:行24:/opt/cloudera/parcels/SPARK2/bin/load-spark-env.sh: 没有那个文件或目录 .../pyspark:行77: /opt/cloudera/parcels/SPARK2/bin/spark-submit: 没有那个文件或目录
正确的路径:export SPARK_HOME=/opt/cloudera/parcels/SPARK2/lib/spark2
这里的spark2路径下有python 文件。
PYTHONPATH
PYTHONPATH对应在集群上进行任务时用户计算的python,我选择的时集群中自带的python。

PYTHONPATH=/opt/cloudera/parcels/SPARK2/lib/spark2/python:$PYTHONPATH #pythonpath指向spark目录下的python文件夹

py4j
选择上述步骤中python中的py4j

export PYTHONPATH=/opt/cloudera/parcels/SPARK2/lib/spark2/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH # 指向py4j包,没有的话下载一个

PYSPARK_PYTHON
PYSPARK_PYTHON定义的是调用pyspark的时候选择的python,这里的python版本要和集群的python版本一致。

PYSPARK_PYTHON=python

PYSPARK_DRIVER_PYTHON,PYSPARK_DRIVER_PYTHON_OPTS
这两项是定义使用jupyter交互的关键!

PYSPARK_DRIVER_PYTHON=jupyter
PYSPARK_DRIVER_PYTHON_OPTS="notebook"

在安装过程中的报错
一开始我安装的是anaconda3,对应的是python3.6,出现了如下报错
Exception: Python in worker has different version 2.7 than that in driver 3.6, PySpark cannot run with different minor versions.Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.
错误原因是jupyter中python的版本是3.6,但集群中python版本是2.7,我在anaconda中又重新安装了一个python2.7的环境,并建立对应的jupyter kernel,运行成功。但考虑到修改的复杂性,建议一开始直接下载anaconda2,但如果集群上是python3,那另说。
docker中有现成的镜像可用,暂时还未研究。

提交资源定义
在完成上述的安装任务后,直接中终端中输入:pyspark即可打开jupyter。此时的jupyter类似在终端启的一个pyspark-shell ,所以在启用jupyter时可以定义任务资源,例如:

nohub pyspark --master yarn --deploy-mode client --driver-memory 20g --driver-cores 1 --num-executors 10 --executor-memory 6g --executor-cores 1 --conf spark.yarn.executor.memoryOverhead=8192  --conf spark.default.parallelism=800 &

"nohup"是定义在终端关闭后,jupyter程序仍在运行(常规的jupyter任务也可以用,很强大的功能);后面是定义的资源大小,可根据实际的情况配置。
关闭nohup进程
若想要关闭nohup jupyter,可以执行以下操作:
#查看进程
1.ps -aux | grep jupyter
#结束进程
2.kill -9 xxxx(进程号)

三、在命令行定义信息

如果没有配置jupyter的环境变量信息,进入到./pyspark所在目录执行以下信息。
1.本地启动

PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook --allow-root" ./pyspark # 其中--allow-root是因为root登录master

2.YARN-client模式运行

PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook --allow-root" MASTER=yarn-client ./pyspark

3.Spark Stand Alone 模式运行

PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook --allow-root" MASTER=spark://192.168.XXX:7077 ./pyspark --num-executors 1 --total-executor-cores 2 --executor-memory 512m

OK!
最后,非常好的参考文档:
jupyter notebook+Spark配置远程登录服务器
How to install PySpark and Jupyter Notebook in 3 Minutes
Apache Spark in Python: Beginner’s Guide
https://www.cnblogs.com/zenan/p/9585402.html

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值