Amazon s3 与s3的Emrfs文件同步不工作

Amazon s3 与s3的Emrfs文件同步不工作,amazon-s3,pyspark,amazon-emr,Amazon S3,Pyspark,Amazon Emr,在AmazonEMR集群上运行spark作业后,我直接从s3中删除了输出文件,并尝试再次运行该作业。在尝试使用sqlContext.write写入s3上的拼花文件格式时,我收到以下错误: 'bucket/folder' present in the metadata but not s3 at com.amazon.ws.emr.hadoop.fs.consistency.ConsistencyCheckerS3FileSystem.getFileStatus(ConsistencyChecke

在AmazonEMR集群上运行spark作业后,我直接从s3中删除了输出文件,并尝试再次运行该作业。在尝试使用sqlContext.write写入s3上的拼花文件格式时,我收到以下错误:

'bucket/folder' present in the metadata but not s3
at com.amazon.ws.emr.hadoop.fs.consistency.ConsistencyCheckerS3FileSystem.getFileStatus(ConsistencyCheckerS3FileSystem.java:455)
我试着跑步

emrfs sync s3://bucket/folder

虽然它确实从跟踪元数据的DynamoDB实例中删除了一些记录,但似乎并没有解决该错误。不知道我还能尝试什么。如何解决此错误?

结果是我需要运行

emrfs delete s3://bucket/folder

首先在运行同步之前。运行上述操作解决了问题。

一致性问题主要来自spark和hadoop系统中的重试逻辑。当在s3上创建文件的过程失败,但它已在dynamodb中更新时。当hadoop进程重新启动该进程时,因为条目已经存在于dynamodb中。它抛出一致性错误

如果要删除存储在dynamaoDB中的s3元数据,其对象已被删除。 这就是步骤, 删除所有元数据

emrfs diff s3://path 
删除路径中的所有对象, emrfs delete使用哈希函数来删除记录,因此它也可能删除不需要的条目,因此我们将在后续步骤中进行导入和同步

emrfs delete   s3://path
将s3中物理存在的对象的元数据检索到dynamo db中

emrfs import s3://path
在s3和元数据之间同步数据。

emrfs sync s3://path      
在所有操作之后,查看该特定对象是否同时存在于s3和元数据中

emrfs diff s3://path 

我来到这个页面是因为我遇到了错误“键在元数据中被标记为目录,但在s3中是文件”,我感到非常困惑。我想发生的是,我不小心创建了一个同名的文件和目录。通过删除文件,解决了我的问题:

aws s3 rm s3://bucket/directory_name_without_trailing_slash

我也有同样的问题。。当从s3手动删除文件时,同步没有任何用处。文档是完全错误和误导性的。得到了同样的问题,同意文档对此非常不清楚。我想知道这是否对任何人都有帮助?我使用的是EMR 5.21.0,spark shell将只看到存储桶中的部分文件,无论我做什么。@ViacheslavRodionov可能是这些文件有权限问题。您可能需要询问并回答自己的问题,因为这是一个单独的问题。。。