EMR引导脚本安装petastorm失败问题求助
在EMR 5.33.1中安装petastorm==0.12.1时卡在pyspark安装的解决方法
环境与原安装流程
- 环境:EMR 5.33.1,Python 3.7.16
- 目标:安装petastorm==0.12.1
- 原可行步骤:
- 将petastorm及所有依赖包上传至S3文件夹
- 执行命令复制包到本地临时文件夹:
aws s3 cp s3_whl_files_path ./tmpfolder/ --recursive --region=<region-name> - 执行本地离线安装:
sudo python3 -m pip install --no-index --find-links=./tmpfolder petastorm==0.12.1
当前问题
- 引导脚本日志
node/stdout.gz显示安装卡在处理./tmpfolder/pyspark-2.4.7.tar.gz,无"successfully installed petastorm"输出,node/stderr.gz无报错 - 应用日志
containers/stdout.gz提示ModuleNotFoundError: No module named 'petastorm'
已尝试操作
- 补充安装未成功的依赖包,依赖安装成功但仍找不到petastorm模块,pyspark依旧未完成安装
- 在
bootstrap.sh中单独添加pyspark安装步骤,问题未解决 - 安装py4j成功,pyspark安装停滞问题依旧
问题原因分析
EMR自带的pyspark属于Spark分发包的一部分,并非通过pip安装到Python环境中的包,因此pip无法识别系统中已存在的pyspark,会严格按照petastorm的依赖列表尝试重新安装。而pyspark-2.4.7.tar.gz是源码包,安装时需要解压、配置等操作,在EMR节点上可能因资源限制、权限问题或处理耗时过长导致安装停滞,进而中断整个petastorm的安装流程。
解决方案
1. 强制跳过pyspark安装
在pip安装命令中添加--ignore-installed pyspark参数,让pip忽略已存在的pyspark,直接安装petastorm及其他依赖:
sudo python3 -m pip install --no-index --find-links=./tmpfolder --ignore-installed pyspark petastorm==0.12.1
2. 使用预编译wheel包替代源码包
检查S3中的依赖包,尽量使用.whl格式的预编译包替换.tar.gz源码包。源码包需要额外编译步骤,更容易在EMR节点上出现安装停滞问题。
3. 开启详细日志排查停滞原因
如果仍出现停滞,添加-vvv参数输出详细安装日志,定位具体停滞环节:
sudo python3 -m pip install --no-index --find-links=./tmpfolder --ignore-installed pyspark petastorm==0.12.1 -vvv
4. 确认pip与EMR Python环境一致
EMR可能存在多个Python版本,确保使用的python3是Spark关联的Python环境,可使用绝对路径执行pip:
sudo /usr/bin/python3 -m pip install --no-index --find-links=./tmpfolder --ignore-installed pyspark petastorm==0.12.1
内容的提问来源于stack exchange,提问作者haneulkim
相关产品推荐
相关产品推荐

