会话在AWS EMR集群中不是活动的Pyspark

时间:2019-09-23 12:48:26

标签: pyspark amazon-emr

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

"..
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()

有效!

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

出什么问题了?

6 个答案:

答案 0 :(得分:2)

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

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

要增加驱动程序的内存,只需

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

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

答案 1 :(得分:0)

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

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

有关如何更改Spark默认设置的信息,请参见EMR's official documentation

  

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

答案 2 :(得分:0)

信誉不足以发表评论。

我尝试将心跳间隔增加到更高(100秒),但结果仍然相同。 FWIW,错误显示在<9s内。

答案 3 :(得分:0)

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

根据输出判断,如果您的应用程序未以FAILED状态完成,则听起来像是Livy超时错误:您的应用程序可能比Livy会话所定义的超时时间更长(默认为1h),所以即使尽管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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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