python对应的版本兼容性是个头疼的问题,因此后续再使用pyarrow包的过程中安装出现了不兼容的问题。
所以后续改为使用anaconda3中是适用conda创建虚拟环境来解决这个问题。
参考另外一篇。
1. 下载python3地址:https://www.python.org/ftp/python/3.5.9/Python-3.5.9.tgz
注意:由于spark是2.4.8版本,python3版本只能使用3.5版本,太高版本可能会不兼容
我用3.9版本测试有问题。
解压缩后需要编译安装,指定安装路径到python3目录下:
tar -zxvf Python-3.5.9.tgz cd Python-3.5.9 ./configure -prefix=/home/hadoop/bigdata/python3/ make && make install
2. 添加软连接
sudo ln -s /home/hadoop/bigdata/python3/bin/python3 /usr/bin/python3
注意:必须添加软连接,即使在path中配置环境变量也不行
3. 分发python包
scp -r python3 hadoop@cdh192-50:/home/hadoop/bigdata/
4. 在自己本机上通过ansible在每台机器上执行以下命令来添加软连接(不行就手工一个个敲)
准备好hosts文件,执行以下命令:(存在部分机器成功,部分机器报错的情况)
ansible root -m file -a "src=/home/hadoop/bigdata/python3/bin/python3 dest=/usr/bin/python3 state=link"
不行的,就手工进去执行:
ln -s /home/hadoop/bigdata/python3/bin/python3 /usr/bin/python3
5. 修改spark的环境变量spark-env.sh,添加以下配置:
export PYSPARK_PYTHON=/home/hadoop/bigdata/python3/bin/python3
6. 启动pyspark:
7. 准备测试案例(python执行脚本)
"""SimpleApp.py""" from pyspark.sql import SparkSession logFile = "/tmp/logs/LICENSE" # Should be some file on your system spark = SparkSession.builder.appName("SimpleApp").getOrCreate() logData = spark.read.text(logFile).cache() numAs = logData.filter(logData.value.contains('a')).count() numBs = logData.filter(logData.value.contains('b')).count() print("Lines with a: %i, lines with b: %i" % (numAs, numBs)) spark.stop()
上传需要的文件LICENSE到hdfs上的/tmp/logs/文件夹中。
8. 提交spark任务到yarn上
spark-submit --master yarn --deploy-mode client --queue prod SimpleApp.py
执行显示: