pycharm搭建远程spark调试环境

pycharm搭建远程spark调试环境

  • 内容描述
    • pyspark的安装
    • python3的安装
    • 回到windows客户端这边安装pycharm
    • 开始编译代码,但是报错zlib libffi等等

内容描述

之前一直在单机伪分布式的spark环境中调试,操作系统是windows,现在需要连接到集群环境中,CentOS7,Python3.7.1.
集群已经用ambari搭建好了Hadoop生态。

pyspark的安装

由于目标集群已经安装好了spark,因此这里只需要配置环境变量即可。
下面的操作,在spark的master机器上做即可。
在/etc/profile最后加上:

export SPARK_HOME=/usr/hdp/current/spark2-client
export PATH=$SPARK_HOME/bin:/usr/local/python3/ext_pkg/pandoc-2.4/bin:$PATH
export PYTHONPATH=/usr/local/python3
export PYTHONPATH=$SPARK_HOME/python:/usr/hdp/current/spark2-client/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH

生效使用: source /etc/profile

同时,为了让pyspark使用python3,需要 vi ~/.bashrc 末尾加上:

export PYSPARK_PYTHON=python3

注意这里的python3是/usr/bin里面的可执行程序,因为python被python2占用,所以这是在保留python2的情况下安装的python3. (python3的安装下面讲)
同理,source ~/.bashrc
如果python3安装好了的话,这时候输入pyspark就能进入交互界面了。
但这里一直遇到一个问题,就是sc(sparkcontext)初始化不成功,这应该是slave机器上没有安装相同的python所致。

python3的安装

python需要在master和slave机器上安装相同版本。这里选用最新的3.7.1
下载Python-3.7.1.tgz
解压:tar -zxvf Python-3.7.1.tgz
执行./configure
然后修改一个文件:vi ./Modules/Setup.dist
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz这一行前面的#号去掉
这一步是为了避免后面连接时的一个zlib的一个错误
然后执行make && make install

回到windows客户端这边安装pycharm

需要安装专业版本,而不是社区版本,否则没有远程编译器的功能。

然后settings, 添加远程的python
pycharm搭建远程spark调试环境_第1张图片

需要注意的是,如果添加错了,或者python环境变了的话,在这里删除是不能完美删除掉配置信息的。这样的话,要么出现下面读不出来python的包,要么就是本地的代码无法上传到正常的映射目录。

所以如果要完美删除,需要在这里删除掉。
pycharm搭建远程spark调试环境_第2张图片

接下来为了让python找到spark,可以用配置环境变量的办法,但是我这边因为保留了python2,怕配置环境变量弄错,所以就采取安装findspark这个包的办法。安装包以后代码里要加:

import findspark
import os
"""linux编译"""
os.environ['SPARK_HOME']='/usr/hdp/current/spark2-client'
os.environ['PYSPARK_PYTHON']='/usr/bin/python3'
findspark.init()
from pyspark import SparkContext

这样才能正常加载SparkContext。

这里有个插曲,就是因为集群没联网,所以安装python包需要手动。
我采用的办法是先用本机的(windows)上的python3,利用pycharm自动安装包,然后导出来。方法是:
pip freeze >> pkg.txt
pip install --download D:\pkgs -r pkg.txt --no-binary=:all:
这样就能把需要的包下载下来。

然后传到群集上,在群集里解开tar包,
进入后:python3 setup.py install 这样安装。

开始编译代码,但是报错zlib libffi等等

这个时候,需要到群集所有机子上把这些包装了。
这些都是rpm包,
可以用rpm -qa |grep zlib 或者rpm -qa |grep libffi来查看是否安装以及安装版本
我的环境上需要装下面这些包:
libffi6-3.2.1-alt2.x86_64.rpm
libffi-devel-3.2.1-alt2.x86_64.rpm
zlib-1.2.7-17.el7.x86_64.rpm
zlib-devel-1.2.7-17.el7.x86_64.rpm
安装办法都是 rpm -ivh xxxx.rpm --nodeps
如果安装出错,或者冲突什么的,需要 rpm -e xxxx --nodeps

最后就能在本地windows系统,编译远端linux集群的代码了:
pycharm搭建远程spark调试环境_第3张图片

你可能感兴趣的:(spark)