【问题标题】:Session isn't active Pyspark in an AWS EMR cluster会话在 AWS EMR 集群中不是活动的 Pyspark
【发布时间】:2020-01-23 13:06:50
【问题描述】:

我打开了一个 AWS EMR 集群,并在 pyspark3 jupyter notebook 中运行以下代码:

"..
textRdd = sparkDF.select(textColName).rdd.flatMap(lambda x: x)
textRdd.collect().show()
.."

我收到了这个错误:

An error was encountered:
Invalid status code '400' from http://..../sessions/4/statements/7 with error payload: {"msg":"requirement failed: Session isn't active."}

跑线:

sparkDF.show()

有效!

我还创建了文件的一小部分,我的所有代码都运行良好。

有什么问题?

【问题讨论】:

  • 稍等片刻,笔记本会创建与 EMR 的会话或重新启动内核。我认为只是超时
  • 集群现在开了两个小时,我需要等多久?为什么我不需要等待小子集?
  • 不是集群,而是您的笔记本。检查您的 EMR 的应用程序日志,确认笔记本的 livy 会话运行良好。
  • 如何检查?
  • 您的 EMR 控制台 > 应用程序历史记录并找到 livy-session-xx 用于将 xx 编号为 1、2、...

标签: pyspark amazon-emr


【解决方案1】:

您可能会从这个类似的 Stack Overflow 线程中获得一些见解:Timeout error: Error with 400 StatusCode: "requirement failed: Session isn't active."

解决方案可能是增加spark.executor.heartbeatInterval。默认为 10 秒。

请参阅EMR's official documentation,了解如何更改 Spark 默认值:

您可以使用 spark-defaults 配置分类或 spark 配置分类中的 minimizeResourceAllocation 设置更改 spark-defaults.conf 中的默认值。

【讨论】:

  • 谢谢,我试试看告诉你。
  • 我尝试将 heartbeatInterval 增加到 110 秒,但它并没有为我解决问题。 livy 会话总是会断开连接。我在 jupyter 笔记本中运行代码,但是,如果我使用 spark-submit 运行相同的代码,它就没有问题。
【解决方案2】:

声誉不足,无法发表评论。

我尝试将心跳间隔增加到更高(100 秒),但结果仍然相同。 FWIW,错误出现在

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,超时的原因是驱动程序内存不足。由于您运行collect(),所有数据都会发送到驱动程序。默认情况下,通过 JupyterHub 创建 Spark 应用程序时,驱动程序内存为 1000M,即使您通过 config.json 设置了更高的值。您可以通过在 jupyter notebook 中执行代码来看到这一点

    spark.sparkContext.getConf().get('spark.driver.memory')
    
    1000M
    

    要增加驱动程序内存,只需这样做

    %%configure -f 
    {"driverMemory": "6000M"}
    

    这将使用增加的驱动程序内存重新启动应用程序。您可能需要为数据使用更高的值。希望对您有所帮助。

    【讨论】:

    • IMO 司机可能因多种原因死亡。但是,无论如何,%%configure -f 命令都会重新启动它。
    【解决方案4】:

    来自This stack overflow question's answer which worked for me

    从输出判断,如果您的应用程序没有以 FAILED 状态完成,这听起来像是 Livy 超时错误:您的应用程序可能花费的时间比 Livy 会话定义的超时时间(默认为 1 小时)更长,所以即使尽管 Spark 应用程序成功,但如果应用程序花费的时间超过 Livy 会话的超时时间,您的笔记本仍会收到此错误。

    如果是这样,以下是解决方法:

    1. edit the /etc/livy/conf/livy.conf file (in the cluster's master node)
    2. set the livy.server.session.timeout to a higher value, like 8h (or larger, depending on your app)
    3. restart Livy to update the setting: sudo restart livy-server in the cluster's master
    4. test your code again
    

    编辑此设置的替代方法 - https://allinonescript.com/questions/54220381/how-to-set-livy-server-session-timeout-on-emr-cluster-boostrap

    【讨论】:

    【解决方案5】:

    对我有用的是将 {"Classification": "spark-defaults", "Properties": {"spark.driver.memory": "20G"}} 添加到 EMR 配置中。

    【讨论】:

      【解决方案6】:

      只是重新启动帮助我解决了这个问题。在您的 Jupyter Notebook 上,转到-->内核-->>重新启动 完成后,如果您使用“spark”命令运行单元格,您将看到建立了一个新的 spark 会话。

      【讨论】:

        猜你喜欢
        • 2016-02-19
        • 1970-01-01
        • 2022-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多