【发布时间】:2020-07-19 08:46:12
【问题描述】:
我在 AWS 中创建了一个基本的 EMR 集群,我正在尝试使用通过 AWS 控制台提供的 Jupyter Notebooks。启动笔记本似乎工作正常,而且我还能够在以pyspark 内核开始的笔记本中运行基本的 python 代码。笔记本中设置了两个变量:spark 是 SparkSession 实例,sc 是 SparkContext 实例。显示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