在 EMR 集群上安装 pandas

era*_*129 5 python amazon-web-services amazon-emr pyspark

TLDR - 我想sudo yes | sudo pip3 uninstall numpy在 EMR 引导操作中运行该命令两次,但它只运行一次。

我首先要说的是,我的目标是运行一个支持 Pyspark 的 EMR 托管笔记本,在 EMR 集群上运行。由于各种原因,我还需要在集群上安装 pandas。首先,我遇到了一个问题,即默认 python3 安装中存在两个 numpy 版本,并且必须将它们都删除才能使用较新的版本(如本线程中所示 - How do I have multiple versions of numpyinstalled on Amazon EMR and how to我删除早期版本?)。

如果我 ssh 到主节点并执行sudo yes | sudo pip3 uninstall numpy两次,它会起作用:

[hadoop@ip-xxx-xx-xx-xxx ~]$ sudo yes | sudo pip3 uninstall numpy
Uninstalling numpy-1.21.1:
  /usr/bin/f2py
  /usr/local/bin/f2py
  /usr/local/bin/f2py3
  /usr/local/bin/f2py3.7
    .......
    .......
    .......
  /usr/local/lib64/python3.7/site-packages/numpy/typing/tests/test_runtime.py
  /usr/local/lib64/python3.7/site-packages/numpy/typing/tests/test_typing.py
  /usr/local/lib64/python3.7/site-packages/numpy/version.py
Proceed (y/n)?   Successfully uninstalled numpy-1.21.1
[hadoop@ip-xxx-xx-xx-xxx ~]$ sudo yes | sudo pip3 uninstall numpy
Uninstalling numpy-1.16.5:
  /usr/local/lib64/python3.7/site-packages/numpy
  /usr/local/lib64/python3.7/site-packages/numpy-1.16.5-py3.7.egg-info
Proceed (y/n)?   Successfully uninstalled numpy-1.16.5
Run Code Online (Sandbox Code Playgroud)

我从 python3 安装中删除了 numpy,然后我可以正常安装 numpy 和 pandas。
当我想使用引导操作执行相同的操作时,就会出现问题。使用此 bootstrap.sh 文件:

#!/bin/bash
sudo yes | sudo yum install python3-devel
sudo pip3 install cython
sudo pip3 install matplotlib
sudo yes | sudo pip3 uninstall numpy
sudo pip3 install pyspark boto3
sudo yes | sudo pip3 uninstall numpy
sudo pip3 install numpy
sudo pip3 install pandas
Run Code Online (Sandbox Code Playgroud)

请注意,我在这里卸载了 numpy 两次,但它只是忽略了第二个sudo yes | sudo pip3 uninstall numpy命令!因为我还没有卸载第二个 numpy 安装,所以导致 pandas 安装损坏(再次参见我之前链接到的线程)。为什么会出现这种情况?因为引导操作不起作用,并且无法 ssh 进入从属节点,所以我留下了损坏的 pandas 安装,并且无法修复它。

coo*_*ool 8

不幸的是,对于 EMR 集群来说,目前这个问题还无法修复。我知道它不是流行的解决方案,但您正在寻找“没有解决方案”。

您可以在此处查看官方aws论坛报告的问题,了解更多详细信息。

我将在下面总结问题。

如果你想安装pandas,你需要有numpy。目前的问题是(基于当前的结论),无论 bootstrap.sh 中发生什么,系统 python37-numpy 包都会在 bootstrap.sh 之后自动安装

这意味着,如果您通过 bootstrap 再次安装 nympy,则在 python 中导入 numpy 将导致导入旧版本,这是由 emr 集群设置期间 boostrap 之后发生的步骤强制执行的。

您有两种解决方案:

  1. 在集群引导后手动修复问题(这意味着您需要在所有集群上手动执行此操作,或者通过 ssh 调用 bash 脚本来自动执行此过程)
  2. 您根本不安装 numpy,并使用当前版本,而是使用与该版本兼容的 pandas。

我个人使用了第二种解决方案并安装了pandas 1.1.5,直到aws/emr升级了numpy版本。

我想补充一点,关于您的声明“不起作用,并且不可能通过 ssh 进入从属节点”。您可以在需要时通过 ssh 进入主节点和执行器。emr 的默认安全组不会公开端口 22,因此,如果您无法 ssh 到执行程序,我会先看一下那里。