Apache spark 通过Spark在S3前缀分区中回滚写入失败
我们通过EMR使用ApacheSpark(2.4.5)作业,它读取S3前缀{bucket}/{prefix}/*.json,进行一些数据处理,然后在覆盖模式下通过Spark作业save()将其重写回相同的{bucket}/{prefix}。我的问题是,如果Spark作业在将数据重新写入S3前缀分区时失败,那么是否有任何方法可以以任何原子/事务方式恢复该前缀分区中的数据。Apache spark 通过Spark在S3前缀分区中回滚写入失败,apache-spark,amazon-s3,amazon-emr,Apache Spark,Amazon S3,Amazon Emr,我们通过EMR使用ApacheSpark(2.4.5)作业,它读取S3前缀{bucket}/{prefix}/*.json,进行一些数据处理,然后在覆盖模式下通过Spark作业save()将其重写回相同的{bucket}/{prefix}。我的问题是,如果Spark作业在将数据重新写入S3前缀分区时失败,那么是否有任何方法可以以任何原子/事务方式恢复该前缀分区中的数据。 spark/EMR/S3是否有/所有这些都支持它?spark会将新文件写入文件夹,因为群集节点同时写入文件,最好写入多个文件。
spark/EMR/S3是否有/所有这些都支持它?spark会将新文件写入文件夹,因为群集节点同时写入文件,最好写入多个文件。因此,当您执行覆盖操作时,Spark将首先删除文件夹内容并写入结果 问题是Spark不会缓存整个原始数据,而只是缓存代码中所需的部分数据。如果将结果写入原始路径,则它将首先删除原始路径并将缓存结果写入文件夹
您可以使用append方法,但它将创建一些新文件,而不仅仅是将数据添加到原始文件中。Spark的设计目的不是这样的,在覆盖或失败时无法恢复。您不能使用相同的路径写入结果。它将删除原件。