Emrfs 文件与 s3 同步不起作用

Posted

技术标签:

【中文标题】Emrfs 文件与 s3 同步不起作用【英文标题】:Emrfs file sync with s3 not working 【发布时间】:2017-02-10 21:45:51 【问题描述】:

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

'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 实例中删除了一些记录,它似乎也没有解决错误。不知道我还能尝试什么。如何解决此错误?

【问题讨论】:

【参考方案1】:

原来我需要跑步

emrfs delete s3://bucket/folder

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

【讨论】:

我有同样的问题.. 从 s3 手动删除文件时,同步没有任何用处。文档完全错误且具有误导性。 遇到了同样的问题,同意文档对此非常不清楚。【参考方案2】:

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

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

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

emrfs delete   s3://path

将 s3 中物理存在的对象的元数据检索到 dynamo db 中

emrfs import s3://path

在 s3 和元数据之间同步数据。

emrfs sync s3://path      

完成所有操作后,查看该特定对象是否同时存在于 s3 和元数据中

emrfs diff s3://path 

http://docs.aws.amazon.com/emr/latest/ManagementGuide/emrfs-cli-reference.html

【讨论】:

我想知道这是否对任何人有帮助?我在 EMR 5.21.0 上,无论我做什么,spark-shell 都只会看到存储桶中的部分文件。 @ViacheslavRodionov 可能是那些文件有权限问题【参考方案3】:

我到达此页面是因为我收到错误“密钥在元数据中标记为目录但在 s3 中是文件”并且非常困惑。我认为发生的事情是我不小心创建了同名的文件和目录。通过删除文件它解决了我的问题:

aws s3 rm s3://bucket/directory_name_without_trailing_slash

【讨论】:

你可能应该问然后回答你自己的问题,因为这是一个单独的问题......

以上是关于Emrfs 文件与 s3 同步不起作用的主要内容,如果未能解决你的问题,请参考以下文章

通过火花数据框读取 S3 文件时,胶水书签不起作用

Android Amazon S3文件上传不起作用

当明确给出 s3 路径时,模式合并不起作用

Angular 11 路由在 AWS S3 和 Cloudfront 中不起作用

将静态文件上传到 aws s3 存储桶后,css 中的 URL 不起作用

指向 Amazon S3 存储桶的子域在英国不起作用