集群终止但在本地工作
Posted
技术标签:
【中文标题】集群终止但在本地工作【英文标题】:Cluster terminates but works locally 【发布时间】:2019-03-15 14:53:47 【问题描述】:我正在尝试在 aws EMR 上部署 spark 作业(使用 pyspark 库:ML)。 我想创建一个带有单个实例的简单集群,以了解 EMR 的工作原理。
我使用控制台创建集群,配置如下:
spark-submit --deploy-mode cluster s3://bucket/key/file.py
我的步骤失败了,出现了一堆我难以理解的错误日志:
File "PowerProdPredictionEmr.py", line 261
df = df.select("Perimetre", *target_exprs, *window_exprs, "rn")
SyntaxError: invalid syntax
我不明白,因为它在我的机器上本地工作。
代码如下:
...
window_exprs = [df.power_prod[i] for i in range(w*sample_week)]
df = df.select("Perimetre", *target_exprs, *window_exprs, "rn")
...
有什么想法吗?如有必要,我可以添加其他日志文件。
【问题讨论】:
您在本地使用 Python 3,但在远程使用 Python 2。在 Python 2 中,未命名的参数不能跟随可变参数,并且您只能有一个*
表达式。这将是可移植的:df.select("Perimetre", "rn", *target_exprs + window_exprs)
- 假设 target_exprs
和 window_exprs
是列表。
非常感谢,这就是问题所在。 EMR 有 2.x 作为默认 python 版本,你知道在创建集群时如何将它设置为 3.x 吗?我看到了:aws.amazon.com/fr/premiumsupport/knowledge-center/… 但不知道如何在所有执行器上运行 sh 命令
放置在 EMR 配置中的标准方式 (PYSPARK_(DRIVER)_PYTHON
) 应该可以正常工作 - ***.com/a/40717927/10938362
【参考方案1】:
正如@user10938362 所指出的,尽管 EMR 支持 python 到 3.6 版本,但 2.x 版本是实例上安装的默认版本。
要将python 3设置为默认版本,您可以在“编辑软件/输入配置”中添加以下代码。
[
"Classification": "spark-env",
"Configurations": [
"Classification": "export",
"Properties":
"PYSPARK_PYTHON": "/usr/bin/python3"
]
]
所有python版本问题都将得到解决。
【讨论】:
以上是关于集群终止但在本地工作的主要内容,如果未能解决你的问题,请参考以下文章
AWS EMR Presto 集群突然终止错误:作业流中的所有从属服务器都因 Spot 而终止
为啥在集群模式下读取 CSV 文件失败(而在本地工作正常)?