Spark Dataframe挂起保存

时间:2018-01-11 18:33:57

标签: amazon-web-services hadoop apache-spark pyspark amazon-emr

我一直在努力找出我的火花作业有什么问题,无限期地挂在我尝试将其写入S3或HDFS(约100G的镶木地板数据)的地方。

导致挂起的行:

spark_df.write.save(MY_PATH,format='parquet',mode='append')

我在覆盖和追加模式下尝试了这个,并尝试保存到HDFS和S3,但无论如何都会挂起作业。

在Hadoop资源管理器GUI中,它将spark应用程序的状态显示为“RUNNING”,但看起来似乎没有什么是Spark实际完成的任务,当我查看Spark UI时,没有任何作业在运行。

使其发挥作用的一件事是在群集处于挂起状态时增加群集的大小(我在AWS上)。但是,如果我使用6个工作程序启动集群并增加到7,或者如果我从7开始并增加到8,这对我来说似乎有些奇怪,这无关紧要。群集正在使用两种情况下可用的所有内存,但我没有收到内存错误。

关于可能出现什么问题的任何想法?

1 个答案:

答案 0 :(得分:2)

感谢大家的帮助。我最终弄清楚问题实际上是一些单独的问题。这是我理解他们的方式:

当我直接保存到S3时,它与Steve Loughran提到的在S3上重命名的速度非常慢的问题有关(所以看起来我的集群什么也没做)。在写入S3时,所有数据都被复制到临时文件,然后在S3上“重命名” - 问题是重命名不会像在文件系统上那样发生,实际上需要花费O(n)时间。所以我的所有数据都被复制到S3,然后所有的时间都花在重命名文件上。

我面临的另一个问题是将数据保存到HDFS,然后通过s3-dist-cp将其移至S3。我的所有集群资源都被Spark使用,因此当Application Master尝试提供资源以通过s3-dist-cp移动数据时,它无法使用。因为Spark而无法移动数据,并且Spark不会因为我的程序仍在尝试将数据复制到S3(因此它们被锁定)而无法关闭。

希望这可以帮助别人!

相关问题