我已经在AWS中创建了一个基本的EMR集群,我正在尝试使用通过AWS控制台提供的木星笔记本。启动笔记本似乎很好,而且我还能够在笔记本中运行从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()我不是火花专家,但我认为这段代码应该将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完整的堆栈跟踪是这里。
稍微挖掘一下AWS门户,我就可以记录来自节点的输出。来自其中一个节点的标准输出包括以下内容:
The path python3 (from --python=python3) does not exist我尝试在主节点上手动运行/usr/bin/virtualenv命令(在登录之后),这很好,但是在我这样做之后,这个错误当然仍然存在。
虽然这个错误在大多数情况下都会发生,但我能够在一个会话中使其正常工作,在这个会话中,我可以像我所期望的那样对星火集群运行几个操作。
关于集群设置的技术信息:
emr-6.0.0r5a.2xlarge。知道我做错什么了吗?请注意,我是完全陌生的EMR和火花。
编辑:添加stdout日志和有关通过ssh在主节点上手动运行virtualenv命令的信息。
发布于 2020-04-08 12:22:03
我转而使用emr-5.29.0,这似乎解决了问题。也许这是emr-6.0.0的一个问题?无论如何,我有一个功能性的解决办法。
发布于 2020-11-19 17:18:12
对我来说,问题是虚拟器是在执行程序上使用不存在的python路径创建的。把遗嘱执行人指向右边的人帮我做了这件事:
"spark.pyspark.python": "/usr/bin/python3.7"下面是我在笔记本一开始就重新吐露了这个星火应用的方式:
{"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"}
}https://stackoverflow.com/questions/61075287
复制相似问题