在YARN上运行Spark 2.3(Python 3.x)执行pi.py时遇库依赖错误
你遇到的确实是库依赖问题,和Spark配置本身关系不大——问题出在你使用的Python 3.6.5找不到它需要的libffi.so.4库文件,而旧版本Python 3.3.x依赖的libffi版本刚好是系统已有的,所以能正常运行。
问题原因
libffi是Python的ctypes模块依赖的底层库,你的Python 3.6.5编译/安装时依赖的是libffi.so.4,但当前系统中没有这个版本的库,或者库的路径没有被Python识别到。
解决方案
下面是具体的修复步骤:
1. 检查系统现有libffi库
先通过命令查看系统里已安装的libffi文件:
find / -name "libffi.so*" 2>/dev/null
这个命令会列出所有以libffi.so开头的文件,比如可能会看到libffi.so.6、libffi.so.6.0.4等更高版本的文件。
2. 安装缺失的libffi.so.4(推荐)
因为你的系统是SUSE,优先通过包管理器安装对应版本的libffi:
sudo zypper install libffi4
如果zypper提示找不到包,可以去SUSE的软件仓库查找对应的rpm包手动安装。
3. 临时解决方案:创建软链接(如果找不到对应包)
如果系统有更高版本的libffi(比如libffi.so.6),可以尝试创建软链接模拟libffi.so.4:
# 替换成你实际找到的libffi路径 sudo ln -s /usr/lib64/libffi.so.6 /usr/lib64/libffi.so.4
⚠️ 注意:这种方法是临时 workaround,可能存在兼容性风险,优先推荐安装对应版本的库。
4. 重新编译Python(如果是手动编译的版本)
你的Python是Python-3.6.5_suse,看起来是手动编译安装的。如果上面的方法都不行,可以重新编译Python,确保编译前系统已安装libffi的开发包:
# 先安装libffi开发依赖 sudo zypper install libffi-devel # 重新编译安装Python 3.6.5 cd Python-3.6.5_suse ./configure --prefix=/your/install/path make && sudo make install
这样编译出来的Python会自动链接系统当前的libffi库,避免版本不匹配问题。
5. 验证修复
重新运行Spark的pi示例脚本:
spark-submit --master local[*] pi.py
如果没有报错,说明问题已经解决。
内容的提问来源于stack exchange,提问作者nullptr
相关产品推荐
相关产品推荐

