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 同步不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Angular 11 路由在 AWS S3 和 Cloudfront 中不起作用