我打开了一个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()
有效!
我还创建了文件的一小部分,并且我所有的代码都运行良好。
出什么问题了?
答案 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 会话已建立。