即使在引导程序中安装 pip 后,导入也无法在 Amazon EMR 中工作

Posted

技术标签:

【中文标题】即使在引导程序中安装 pip 后,导入也无法在 Amazon EMR 中工作【英文标题】:Import not working in Amazon EMR even after pip install in bootstrap 【发布时间】:2021-07-14 07:46:10 【问题描述】:

我正在尝试运行 Amazon EMR(版本:emr-6.1.0),并希望预先安装一些 python 包。

所以,我使用了引导脚本:

#!/bin/bash
sudo pip3 install --user pyspark pandas xlrd==1.2.0

EMR 启动正常。但是当我尝试导入我安装的任何模块时,会出现导入错误。

Python 3.7.10 | packaged by conda-forge | (default, Feb 19 2021, 16:07:37) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.24.1 -- An enhanced Interactive Python. Type '?' for help.

>>> import xlrd

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-2743bb67f6dd> in <module>
----> 1 import xlrd

ModuleNotFoundError: No module named 'xlrd'

我的第一个想法是没有安装软件包,而是安装了 EMR 日志文件,

stdout.gz(即在路径中:Amazon S3 /aws-logs-600286585385-us-east-1/elasticmapreduce/j-27GOG786YFR2SB/node/i-02fabe3g74jf9959a/bootstrap-actions/1/) 另有说明:

Collecting pyspark
  Downloading https://files.pythonhosted.org/packages/89/db/e18cfd78e408de957821ec5ca56de1250645b05f8523d169803d8df35a64/pyspark-3.1.2.tar.gz (212.4MB)
Collecting pandas
  Downloading https://files.pythonhosted.org/packages/99/f7/01cea7f6c963100f045876eb4aa1817069c5c9eca73d2dbfb5d31ff9a39f/pandas-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (10.8MB)
Collecting xlrd==1.2.0
  Downloading https://files.pythonhosted.org/packages/b0/16/63576a1a001752e34bf8ea62e367997530dc553b689356b9879339cf45a4/xlrd-1.2.0-py2.py3-none-any.whl (103kB)
Collecting py4j==0.10.9 (from pyspark)
  Downloading https://files.pythonhosted.org/packages/9e/b6/6a4fb90cd235dc8e265a6a2067f2a2c99f0d91787f06aca4bcf7c23f3f80/py4j-0.10.9-py2.py3-none-any.whl (198kB)
Collecting python-dateutil>=2.7.3 (from pandas)
  Downloading https://files.pythonhosted.org/packages/d4/70/d60450c3dd48ef87586924207ae8907090de0b306af2bce5d134d78615cb/python_dateutil-2.8.1-py2.py3-none-any.whl (227kB)
Collecting numpy>=1.17.3 (from pandas)
  Downloading https://files.pythonhosted.org/packages/2c/d2/8973eb282fc3c7e6c4db0469f0390d81d8eb9ae56dfaa2a7e6db07283682/numpy-1.21.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (14.1MB)
Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.7/site-packages (from pandas)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/site-packages (from python-dateutil>=2.7.3->pandas)
Installing collected packages: py4j, pyspark, python-dateutil, numpy, pandas, xlrd
  Running setup.py install for pyspark: started
    Running setup.py install for pyspark: finished with status 'done'
Successfully installed numpy-1.21.0 pandas-1.3.0 py4j-0.10.9 pyspark-3.1.2 python-dateutil-2.8.1 xlrd-1.2.0

关于发生了什么或如何解决问题的任何想法?

【问题讨论】:

【参考方案1】:

我解决了我的问题,并在这里发布了问题所在。

创建 EMR 实例后,首先进入“Starting”状态。即使您可以在此状态下将笔记本连接到 EMR 实例,但尚未完成引导。一段时间后,实例自动进入“Bootstrapping”状态,在该状态下执行引导命令。

我在“Bootstrapping”状态结束之前尝试导入包时出错,导致导入错误。

有关 EMR 实例生命周期的更多信息,请查看此doc。

【讨论】:

【参考方案2】:

如果pip3不行,试试这个方法

sudo python3 -m pip install pandas xlrd==1.2.0

我在使用 emr-5.26.0 时遇到了类似的问题。它对我有用。但不确定pip3 installpython3 -m pip install有什么区别

【讨论】:

感谢您的回复,但我的问题的原因不同。我会写一个相同的答案。另外,我认为“pip install ...”使用pip可执行文件,即pip.exe;但是“python -m pip ...”使用 pip.py 脚本。

以上是关于即使在引导程序中安装 pip 后,导入也无法在 Amazon EMR 中工作的主要内容,如果未能解决你的问题,请参考以下文章

即使在eclipse中安装javafx后我也无法运行javafx程序[重复]

在Python 3中安装createsend时“无法导入名称__version__”

在虚拟环境python 2.7 pycharm中安装后无法导入请求

如何在 CentOS 7 中安装 pip?

即使在环境中安装了django,Django服务器也不会运行

无法使用 Ubuntu 在 docker 容器中安装 pip 包