会话isn';AWS EMR集群中的t活动Pyspark

会话isn';AWS EMR集群中的t活动Pyspark,pyspark,amazon-emr,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

我打开了一个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()
工作

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


问题出在哪里?

您可能会从类似的堆栈溢出线程中获得一些见解:

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

请参见有关如何更改Spark默认值的信息:

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


声誉不足,无法发表评论


我试着将心跳间隔提高到更高的水平(100秒),结果仍然一样。FWIW,错误出现在<9秒。

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

spark.sparkContext.getConf().get('spark.driver.memory'))
要增加驱动程序内存,只需执行以下操作

%%配置-f
{“驾驶室”:“6000M”}
这将在增加驱动程序内存的情况下重新启动应用程序。您可能需要为数据使用更高的值。希望有帮助。

来自

从输出判断,如果您的应用程序没有以失败状态结束,这听起来像是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

编辑此设置的另一种方法是在EMR配置中添加{“Classification”:“spark defaults”,“Properties”:{“spark.driver.memory”:“20G”}。

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

等待一段时间,笔记本会创建到EMR的会话或重新启动内核。刚刚超时我想集群现在已经开放两个小时了,我需要等待多久?为什么我不需要等待小的子集?不是集群而是你的笔记本。请检查您的EMR应用程序日志,确认笔记本电脑上的livy会话工作正常。我如何检查?您的EMR控制台>应用程序历史记录,并找到livy会话xx,以编号xx,如1、2,…谢谢,我会尝试并让您知道。我尝试将心跳间隔增加到110秒,但这并没有解决我的问题。livy会话将始终断开连接。我正在jupyter笔记本中运行代码,但是,如果我使用
spark submit
运行相同的代码,则不会有任何问题。在我看来,司机可能死于多种原因。但是,不管怎样,
%%configure-f
命令都将重新启动它。感谢您的建议。我在这里找到了可以作为JSON文件传递给EMR集群的Livy timeout配置:
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