集群终止但在本地工作

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_exprswindow_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版本问题都将得到解决。

【讨论】:

以上是关于集群终止但在本地工作的主要内容,如果未能解决你的问题,请参考以下文章

Node JS - 记录工作集群最后一个异常

AWS EMR Presto 集群突然终止错误:作业流中的所有从属服务器都因 Spot 而终止

让 EMR 集群在终止时终止其 EC2 实例

为啥在集群模式下读取 CSV 文件失败(而在本地工作正常)?

hadoop2.0中加入全新的集群资源管理器,下面哪个不是yarn中的组件

Databricks CLI,终止集群