【问题标题】:AWS EMR pyspark notebook fails with `Failed to run command /usr/bin/virtualenv (...)`AWS EMR pyspark 笔记本因“无法运行命令 /usr/bin/virtualenv (...)”而失败
【发布时间】:2020-07-19 08:46:12
【问题描述】:

我在 AWS 中创建了一个基本的 EMR 集群,我正在尝试使用通过 AWS 控制台提供的 Jupyter Notebooks。启动笔记本似乎工作正常,而且我还能够在以pyspark 内核开始的笔记本中运行基本的 python 代码。笔记本中设置了两个变量:sparkSparkSession 实例,scSparkContext 实例。显示sc 会产生<SparkContext master=yarn appName=livy-session-0>(输出当然会因会话而略有不同)。

一旦我执行实际撞击火花机器的操作,就会出现问题。例如:

sc.parallelize(list(range(10))).map(lambda x: x**2).collect()

我不是 spark 专家,但我相信这段代码应该在整个集群中分配 0 到 9 的整数,将它们平方,然后以列表的形式返回结果。相反,我得到了一个冗长的堆栈跟踪,主要来自 JVM,但也有一些 python 组件。我相信堆栈跟踪的中心部分如下:

py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 4.0 failed 4 times, most recent failure: Lost task 0.3 in stage 4.0 (TID 116, ip-XXXXXXXXXXXXX.eu-west-1.compute.internal, executor 17): java.lang.RuntimeException: Failed to run command: /usr/bin/virtualenv -p python3 --system-site-packages virtualenv_application_1586243436143_0002_0

完整的堆栈跟踪是here

在 AWS 门户中进行了一些挖掘,让我记录了节点的输出。 stdout from one of the nodes 包括以下内容:

The path python3 (from --python=python3) does not exist

我尝试在主节点上手动运行/usr/bin/virtualenv 命令(通过登录后),效果很好,但是在我这样做之后错误当然仍然存在。

虽然这个错误大部分时间都会发生,但我能够在一个会话中使其正常工作,在那里我可以按预期对 spark 集群运行多个操作。

关于集群设置的技术信息:

  • emr-6.0.0
  • 安装的应用程序是“Ganglia 3.7.2、Spark 2.4.4、Zeppelin 0.9.0、Livy 0.6.0、JupyterHub 1.0.0、Hive 3.1.2”。 Hadoop 也包括在内。
  • 3 个节点(其中一个作为主节点),全部为r5a.2xlarge

任何想法我做错了什么?请注意,我对 EMR 和 Spark 完全陌生。

编辑:添加了标准输出日志和有关通过 ssh 在主节点上手动运行 virtualenv 命令的信息。

【问题讨论】:

    标签: amazon-web-services apache-spark pyspark jupyter-notebook amazon-emr


    【解决方案1】:

    对我来说,问题是 virtualenv 是在执行程序上使用不存在的 python 路径创建的。将执行者指向正确的执行者为我完成了这项工作:

    "spark.pyspark.python": "/usr/bin/python3.7"
    

    这是我在笔记本开头重新配置 spark 应用程序的方式:

    {"conf":{"spark.pyspark.python": "/usr/bin/python3.7",
             "spark.pyspark.virtualenv.enabled": "true",
             "spark.pyspark.virtualenv.type": "native",
             "spark.pyspark.virtualenv.bin.path":"/usr/bin/virtualenv"}
    }
    

    【讨论】:

      【解决方案2】:

      我已改用emr-5.29.0,这似乎可以解决问题。也许这是emr-6.0.0 的问题?无论如何,我有一个实用的解决方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-23
        • 2020-09-09
        相关资源
        最近更新 更多