记 搭建pycharm远程连接spark的艰难过程

意义:

`搭建pycharm远程开发spark 意义在于。我们只需要在pycharm来手动生成执行spark python项目,在linux下默认会生成spark 项目的python文件。不需要在linux下手动新建spark python文件,然后再执行。总之比较方便。


版本

  1. pycharm 2022 专业版
  2. jdk 1.8
  3. spark 2.4.4
  4. scala 2.12
  5. hadoop 2.7.7
  6. python解释器 (3.8.10) (3.7.0) (3.6.1) (3.5.3)(我这里有四个python解释器,系统默认3.8.10,另外三个是我自己装的)
  7. Ubuntu系统 20.04.5

pycharm连接linux:

  1. 在这里插入图片描述

2.在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


pycharm部署linux下的python环境:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

编写spark程序

接着在pycharm新建python文件 编写python spark程序

from pyspark import SparkContext
sc = SparkContext("spark://192.168.40.142:7077", "WordCountApp")
rs = sc.textFile("/home/test/wc.txt").flatMap(lambda line: line.split(" ")).map(lambda w: (w, 1)).reduceByKey(lambda x, y: x+y).sortBy(lambda x:x[1], False).collect()
for e in rs:
   print(e)

运行报了个错误
在这里插入图片描述

错误1 :JAVA_HOME is not set,RuntimeError

报错一个主要信息就是 JAVA_HOME is not set,RuntimeError。意思是没有设置Java环境变量。我们知道,spark底层是由Scala语言编写的。而Scala是运行在jvm上的。而pyspark只需要用python语言就能够执行spark项目,不需要用用Scala语言来编写。减少学习成本,这里我多插两嘴,简单说说spark,pyspark的执行过程。


  • 比如我想要统计单词出现次数频率的spark项目。它整个过程是怎么样的呢?在driver program中,首先创建sparkcontext对象,这个spark context就是整个过程的指挥官,里面写的该怎么执行单词统计,计算需要的cpu,内存空间资源的多少等等。然后spark context会向cluster manager申请注册资源。cluster manager收到来自spark context所需要资源,就会分配给两个executor运行资源,然后并向spark context指挥官申请工作内容并交给task执行。executor监控task的运行状态,并向cluster manager发送心跳信息,告诉cluster manager我还活着,我在还工作。
    在整个过程 spark context就好比与项目经理,写着整个过程要做什么。cluster manager就是人力资源,或者说是中介,给经理提供人力物力。worker node类比于个车间,车间里面有task,task就是打工仔,专门来干活的,而executor 比task高一个等级,他就是task组长监控task有没有在工作。

在这里插入图片描述

  • pyspark整个过程是这样的。py4j是python和scala之间的桥梁。python创建spark context对象会通过py4j在jvm实例化生成spark context对象,实质上就是python通过py4j调用Java的方法。然后生成
    spark context对象,spark context把工作内容代码交给spark worker执行。而在spark node当中,executor执行不了python文件,只能执行java文件。所以必须配置python环境变量,单独开辟python进程,通过socket通信将python语句交给python进程来执行。

在这里插入图片描述

解决办法
根据上述spark,和pyspark执行过程。这个错误就很容易解决了。只需在python文件配置Linux下java环境。因为你一开始实例化spark contex对象是在jvm上面实例化的,而jdk包含jvm,因此要配置jdk环境变量。
在这里插入图片描述
在这里插入图片描述

运行之前保证你的linux下Hadoop,和spark进程都要开启。
之后又报错在这里插入图片描述

错误2:22/10/14 20:28:34 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

22/10/14 20:29:36 ERROR StandaloneSchedulerBackend: Application has been killed. Reason: All masters are unresponsive! Giving up.
22/10/14 20:29:36 WARN StandaloneSchedulerBackend: Application ID is not initialized yet.
报错内容意思是:1.无法加载hadoop库2.应用进程被杀死,原因 因为所有master进程没回应,放弃。3.应用没有被初始化。
解决办法:在python文件配置spark环境变量即可,原因在于python执行的是spark项目,需要spark环境才可以运行。意思是上述python代码 需要python环境+spark环境+jdk环境才可以执行。
在这里插入图片描述
接着运行又报了个错误
在这里插入图片描述

错误3.py4j.protocol.Py4JError: org.apache.spark.api.python.PythonUtils.isEncryptionEnabled does not exist in the JVM

jvm当中没有isEncryptionEnabled。解决办法在最上面添加两行代码

#添加此代码
import findspark
findspark.init()
#添加此代码
 
from pyspark import SparkConf, SparkContext

作用就是初始化找到本机安装的spark的环境

这里要注意你inux下python要有findspark库。不然也会报错,no modular name findspark。一般默认没有的,这是你要下载个findspark,但是有些python版本是不自带pip,所有首先第一步先下载pip
关于下载pip可以参考这个博客
下载完会在你当前路径下生成 get-pip.py 文件。在之前这条命令之前要先安装curl,照着错误提示安装curl,安装curl过程会报很多错误,那个可以不用管。

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本

这里注意,你用那个版本python运行安装脚本,pip会自动安装到那个python版本

sudo python get-pip.py # 运行安装脚本

你用那个版本python,就用对应的pip

pip install findspark  下载findspark库

下载完后运行
在这里插入图片描述

错误4TypeError: an integer is required (got type bytes)

上网查找原因他们说 spark2.4.4不支持python3.8,只需要另外安装python3.8一下的版本。选择python3.8以下的解释器运行这个文件就可以了
关于如何安装python可以参考别的博客
(https://blog.csdn.net/weixin_48960305/article/details/125143116)

接着一顿操作,安装完python,重新配置linux下的python环境。选择python3.8以下的解释器
这里注意在编译和安装python过程中会报一下小错误,要留意错误信息。但是并不影响你安装成功。
在这里插入图片描述

接着又报错。哈哈哈哈哈笑拉了

错误5 ImportError: No module named ‘_ssl’

原因在于在编译安装python时候,没有把ssl模块编译进去。而ssl模块编译需要一些依赖环境

解决办法:先安装下面两个依赖环境。一开始在网上搜索说要安装openssl-delvel。我试了报了个错误,无法地位软件报e 结果发现这个只有在centos7才有的,而ubuntu是下载下面对应两个《可以参考这个博客》《关于安装openssl另外一种方法》

sudo apt-get install openssl

sudo apt-get install libssl-dev

sudo apt-get install libffi-dev   #这个不安装会报 错误6

安装完进入python配置目录 我这里是是/home/wfh/Python3.5/Modules
修改两个文件

vim Setup.dist
vim  Setup

在这里插入图片描述
将这五行注释全部去掉,然后重新编译安装python。在pychram 部署linux下python3.7解释器。可以部署成功不报刚刚那个错误。接着运行程序
在这里插入图片描述
又报另外一个错误。也是没有_ctypes这个模块

错误6 NO module named ‘_ctypes’

上网寻找解决办法,和上一个no module ssl很相似。只需要安装环境依赖就可以了,重头编译安装python

sudo apt-get install libffi-dev

最后重新运行程序
在这里插入图片描述
成功!!! 呜呜呜呜呜
写于 -2022/10/15 13:39 秋 —by wfh

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值