python - 在 EMR 集群上安装 pandas

标签 python amazon-web-services pyspark amazon-emr

TLDR - 我想在 EMR 引导操作中运行命令 sudo yes | sudo pip3 uninstall numpy 两次,但它只运行一次。
我首先要说我的目标是运行一个支持 Pyspark 的 EMR 托管笔记本,在 EMR 集群上运行。由于各种原因,我还需要在集群上安装 Pandas。首先,我遇到了一个问题,在默认的 python3 安装中存在两个 numpy 版本,并且必须将它们都删除才能使用较新的版本(如在此线程中 - How do I have multiple versions of numpy installed on Amazon EMR and how to I delete the early versions? )。
如果我 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
我从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
请注意,我在这里卸载了 numpy 两次,但它只是忽略了第二个 sudo yes | sudo pip3 uninstall numpy 命令!因为我还没有卸载第二个 numpy 安装,所以它会导致 Pandas 安装损坏(再次参见我之前链接的线程)。为什么会发生这种情况?因为引导操作不起作用,并且不可能通过 ssh 进入从属节点,所以我留下了一个损坏的 Pandas 安装并且无法修复它。

最佳答案

不幸的是,这对于 EMR 集群来说目前无法解决。
我知道它不是流行的解决方案,但是您正在寻找“没有解决方案”。
您可以查看官方 aws 上报告的问题论坛在这里了解更多详情。
我将在下面总结问题。
如果你想安装pandas,你需要有numpy。目前的问题是(基于目前的结论),无论 bootstrap.sh 中发生了什么,系统 python37-numpy 包都会在 bootstrap.sh 之后自动安装
这意味着,如果您通过 bootstrap 再次安装 nympy,在 python 中导入 numpy 将导致导入旧版本,这是由 emr 集群设置期间 boostrap 之后发生的步骤强制执行的。
您有两种解决方案:

  • 要么在集群启动后手动修复问题(这意味着您需要在所有集群中手动执行此操作,或通过 ssh 调用 bash 脚本以自动执行此过程)
  • 您根本不安装 numpy,而是使用当前版本,但使用与该版本兼容的 Pandas。

  • 我个人使用了第二种解决方案并安装了 pandas 1.1.5,直到 aws/emr 升级了 numpy 版本。
    我只想补充一点,关于您的声明“ 不起作用,并且不可能通过 ssh 进入从节点 ”。您可以随时通过 ssh 进入主节点和执行器。 emr 的默认安全组不公开端口 22,因此如果您无法通过 ssh 连接到执行程序,我会先看看那里。

    关于python - 在 EMR 集群上安装 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68724073/

    相关文章:

    amazon-web-services - Amazon MWS 节流是否意味着您可以更新 15 条记录或执行 15 条更新 API 调用?

    python - 使用 GEKKO 进行快速傅立叶变换

    Python 数组操作,pi*[n+1]^2 - pi*[n]^2

    amazon-web-services - AWS lambda list-functions仅过滤出函数名称?

    node.js - Couchbase 多服务器设置问题

    jdbc - spark.driver.extraClassPath多个 jar

    apache-spark - 带有Java 10的org.apache.xbean.asm5.ClassReader。<init>(未知源)上的java.lang.IllegalArgumentException

    Python 子进程 pkill

    python - 从 django 模板解析 session

    python - 从 PySpark GroupBy 中的两列创建 JSON 字符串