EMRFS 是否使 S3 对外部客户端保持一致

Does EMRFS make S3 consistent for external clients

如果我在 HFDS 或本地文件系统中有一个文件,是否可以在启用 EMRFS 的情况下将其复制到 S3,立即关闭集群,并确保该文件可用于列出和读取到外部读者一旦这个复制操作完成?还是 EMRFS 仅在为其启用的特定 EMR 集群内保持一致?通过 EMRFS 从 HDFS 将文件复制到 S3 会是什么样子?来自本地文件系统?

我在 AWS 开发人员论坛上问过同样的问题 -- https://forums.aws.amazon.com/thread.jspa?threadID=257220&tstart=25 -- 这包含很多有价值的细节,它提供了比所有 EMRFS 文档组合 IMO 更好的 EMRFS 概述,但我将提供崩溃摘要的崩溃摘要:

1) 一致视图是一项必须在 EMRFS 配置中明确启用的功能,否则您只有 S3 一致性保证。

2) EMRFS Consistent View 仅在共享相同EMRFS配置的集群内生效--它对正常访问S3的外部客户端没有影响

3) S3 提供的唯一真正的一致性保证是保证之前未写入的新文件的读取一致性,但不是列表一致性。因此,如果客户端专门通过它知道是新创建的路径请求文件,它总是会得到它,但它可能会或可能不会在列表操作中获得文件的路径,并且如果该文件以前存在于那里不能保证客户端将获得哪个版本的读取操作。

EMRFS 是为 EMR hadoop 作业创建的对象启用的一致视图。

1) EMRFS的主要目的是,hadoop作业创建的对象是即时一致的。所以如果有依赖性,这些文件可以用于下一个工作。

2) 将文件复制到 S3 以立即与下一个 hadoop 作业保持一致的方法是,将文件复制到 hdfs,然后复制到 s3 使用以下命令。

  1. Hdfs dfs -put file.txt /user/hadoop/
  2. hdfs dfs -cp /user/hadoop/file.txt s3://bucket-name

列出s3中的文件开销很大,如果要数据在s3上立即一致,就得在s3上实现索引。以下是使用 dynamodb 使文件立即一致的 link https://aws.amazon.com/blogs/big-data/building-and-maintaining-an-amazon-s3-metadata-index-without-servers/?

当您使用 s3 api 时,s3 一致性就会出现,因为它不会通过 EMRFS 元数据。