EMRFS 是不是使 S3 对外部客户端保持一致
Posted
技术标签:
【中文标题】EMRFS 是不是使 S3 对外部客户端保持一致【英文标题】:Does EMRFS make S3 consistent for external clientsEMRFS 是否使 S3 对外部客户端保持一致 【发布时间】:2017-06-05 19:56:10 【问题描述】:如果我在 HFDS 或本地文件系统中有一个文件,是否可以在启用 EMRFS 的情况下将其复制到 S3,立即关闭集群,并保证该文件可用于列出和读取给外部阅读器复制操作完成后?或者 EMRFS 是否仅在启用它的特定 EMR 集群中保持一致?通过 EMRFS 从 HDFS 将文件复制到 S3 会是什么样子?来自本地文件系统?
【问题讨论】:
【参考方案1】:我在 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 提供的唯一真正的一致性保证是,之前未写入的新文件保证读取一致,但不保证列出。因此,如果客户端专门通过它知道已新建的路径请求文件,它将始终获取它,但它可能会或可能不会在列表操作中获取文件的路径,以及该文件是否以前存在于那里不能保证客户端在读取操作时会得到哪个版本。
【讨论】:
【参考方案2】:EMRFS 是为 EMR hadoop 作业创建的对象启用的一致视图。
1) EMRFS 的主要目的是,hadoop 作业创建的对象是立即一致的。因此,如果存在依赖关系,这些文件可以用于下一个作业。
2) 将文件复制到 S3 以使立即与下一个 hadoop 作业保持一致的方式是,将文件复制到 hdfs,然后复制到 s3 使用以下命令。
-
hdfs dfs -put file.txt /user/hadoop/
hdfs dfs -cp /user/hadoop/file.txt s3://bucket-name
列出s3中的文件是非常昂贵的,如果你想让数据在s3上立即一致,你必须在s3上实现索引。以下是使用 dynamodb 使文件立即一致的链接 https://aws.amazon.com/blogs/big-data/building-and-maintaining-an-amazon-s3-metadata-index-without-servers/?
当您使用 s3 api 时,s3 一致性就会出现,因为它不会通过 EMRFS 元数据。
【讨论】:
以上是关于EMRFS 是不是使 S3 对外部客户端保持一致的主要内容,如果未能解决你的问题,请参考以下文章
使用经 EMRFS S3 优化的提交器提高 Apache Spark 写入 Apache Parquet 格式文件的性能