我写这篇小博客的由来:
前天我修改我Ubuntu的用户名名称,改成别人的名字缩写,这样就可以方便他截图交作业了。但没想到的是,修改个用户名居然导致我虚拟机不能正常开机。而且还比较麻烦,不像修改主机名一样简单。无奈之下只好重装系统,重头部署大数据环境,我想着之前有安装过所有环境经验,应该一个小时之内可以完成的。一开始安装Hadoop,hive,hbase,spark很顺利。但是到了pyspark时候已经折腾我大半天了。同样的电脑,同样的操作,遇到了我之前没遇到过的问题。我觉得安装大数据感觉是一门玄学。也给我血痛的教训,不要顺便修改用户名,搞不好会死机的。
我的linux自带python环境是3.8.10 里面没有自带pip 于是就先下载pip
sudo apt install python3-pip
接着下载pyspark
sudo pip install pyspark
接着启动pyspark
好了报错,上网查看错误原因,网上说pyspark2.4.4不支持python3.8以上的环境(巧了我正好是版本pyspark是2.4.4而python是3.8.),只需要降低python版本就可以了。
接着下载安装python3.6,在安装python3.6之前 首先需要先下载两个环境依赖
apt-get install gcc 安装c++解释器
还有个解压包
sudo apt-get -y install zlib*
不下载这个解压包到后面make install过程中你会报一个错误
zipimport.ZipImportError: can’t decompress data; zlib not available,报错内容意思是:无法解压缩数据;zlib不可用
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
解压Python文件
tar -zvxf Python-3.6.1.tgz
进入Python3.6文件
cd Python3.6
先创建python3.6文件夹,主要用来把所有编译安装好文件放在这里方便管理。系统自带的python文件都是东放一个西放一个
sudo mkdir /usr/local/python3.6
接着配置文件指定安装到那个目录(要进入python3.6文件夹才能输入下面命令)
./configure --prefix=/usr/local/python3.6
编译(又是一个漫长的编译安装过程)
make 编译
编译成功会出现这样提示
安装
sudo make install
接着将编译安装好的python3.6解释器放在系统的bin目录(也可以不要用放,但是,你要配置环境变量) 这一步要注意,我当时进入$/usr/local/python3.6/bin 用着相对路径 ln -s python3.6 /usr/bin/python3.6 结果启动失败,所以你一定要用绝对路径 ln -s ./python3.6 /usr/bin/python3.6 或者下面第一条
sudo ln -s /usr/local/python3.6/bin/python3.6 /usr/bin/python3.6
sudo ln -s /usr/loacl/python3.6/bin/pip3.6 /usr/bin/pip3.6
这里注意python3.6自带pip 而python3.5是没有的。而且其实我一开始安装python3.5过程中编译安装过程不是很顺利,可能是python3.5所需依赖的环境比较多。所有建议安装python3.6
在此之前我还用到应该问题 启动python3.6 时候报错
报错内容:-bash: /usr/lib/command-not-found:/usr/bin/python3:解释器错误: 没有那个文件或目录
我当时忘记怎么解决了,总之把之前python文件删除注意别把系统自带的python文件删除了。重新装严格按照上面来应该就不会有问题。
这样就有两个python环境 输入python3 (系统自带)就使用python3.8 输入python3.6就使用python3.6解释器 也可以将python3 指向python ln -s /usr/bin/python3 /usr/bin/python 你输入python就使用python3.8解释器
接着修改spark配置文件
将pyspark选择的python版本选择python3.6
再次启动pyspark
好了又报错,以往之前这样就可以成功了,但是这次不行。都说了是一门玄学。报错的内容意思是 你python里面没有安装py4j模块
那怎么办? 那就安装py4j模块咯
> pip3.6 install py4j
这里注意 如果pip3 instal py4j 你就把py4j库安装到python3.8那文件里面的。但是我们需要用python3.6来运行pyspark,所以要把py4j安装到pip3.6
用pip3 下载的库会放到python3.8 pip下载的库就放到python3.6
报错内容如下
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting py4j
Could not fetch URL https://pypi.python.org/simple/py4j/: There was a problem confirming the ssl certificate: Can’t connect to HTTPS URL because the SSL module is not available. - skipping
Could not find a version that satisfies the requirement py4j (from versions: )
No matching distribution found for py4j
这段报错内容翻译过来简单来说就是 无法下载py4j。原因在于需要ssl/tls证书,但是这两个证书在python3.6是不可用的。
接着我用python3.8 去下载pip3 install py4j 发现可以。但是对我来说没用。
上网寻找办法
都说安装openssl 就可以了 但是出现无法定位包e:openssl-devel 我换了网址镜像修改/etc/apt/sources.list镜像网站还是不行
apt-get install openssl-devel
最后找到办法
pip install py4j -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pyspark启动成功
参考文章
https://blog.csdn.net/weixin_43837883/article/details/89606425
https://blog.csdn.net/SevenBerry/article/details/121088835
https://blog.csdn.net/qq_41842588/article/details/117857189
总之挺坎坷的。写于----2022年10/11 秋 17:45 心情:差(昨天科目三刚挂)
保持饥饿,保持愚蠢 —Steve Jobs