与s3无关的Emrfs文件同步

sak*_*ken 9 amazon-s3 amazon-emr pyspark

在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)
Run Code Online (Sandbox Code Playgroud)

我试过跑步

emrfs sync s3://bucket/folder
Run Code Online (Sandbox Code Playgroud)

即使它确实从跟踪元数据的DynamoDB实例中删除了一些记录,但它似乎没有解决错误.不确定我还能尝试什么.我该如何解决这个错误?

sak*_*ken 12

原来我需要跑

emrfs delete s3://bucket/folder
Run Code Online (Sandbox Code Playgroud)

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

  • 我有同样的问题..当从s3手动删除文件时,sync不会做任何有用的事情.文档是完全错误的并且具有误导性. (3认同)

lon*_*tar 9

大多数情况下,一致的问题是由于spark和hadoop系统中的重试逻辑.当在s3上创建文件的过程失败时,它已在dynamodb中更新.当hadoop进程重启进程时,条目已存在于dynamodb中.它会抛出一致的错误.

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

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

emrfs delete   s3://path
Run Code Online (Sandbox Code Playgroud)

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

emrfs import s3://path
Run Code Online (Sandbox Code Playgroud)

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

emrfs sync s3://path      
Run Code Online (Sandbox Code Playgroud)

在所有操作之后,查看s3和元数据中是否存在该特定对象

emrfs diff s3://path 
Run Code Online (Sandbox Code Playgroud)

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