与s3无关的Emrfs文件同步

时间:2016-10-03 01:03:46

标签: amazon-s3 pyspark amazon-emr

在Amazon EMR集群上运行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实例中删除了一些跟踪元数据的记录,但似乎没有解决错误。不确定我还能尝试什么。如何解决此错误?

3 个答案:

答案 0 :(得分:12)

原来我需要运行

gradle.properties

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

答案 1 :(得分:8)

大多数情况下,一致的问题是由于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

答案 2 :(得分:0)

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

aws s3 rm s3://bucket/directory_name_without_trailing_slash
相关问题